概念
用过 Laravel 的朋友的应该熟悉,Laravel 给我们科普了一个概念 Facade,然而 Laravel 中的 Facade 并不是真正设计模式中定义的 Facade,那么为什么它们都叫一个名字呢?
我们还是先来了解一下 Facade 这个单词的意思吧。
首先它的读音是[fəˈsɑːd],源自法语 façade,法语这个词原意就是 frontage,意思是建筑的正面,门面,由于以前法国,意大利的建筑只注重修葺临街的一面,十分精美,而背后却比较简陋,所以这个词引申的意思是表象,假象。
先讲设计模式中的概念
在设计模式中,其实 Facade 这个概念十分简单。
它主要讲的是设计一个接口来统领所有子系统的功能。看完下面这个例子就明白了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class CPU { public function freeze(){ }
public function jump(){}
public function execute(){} }
class HardDrive { public function read($boot_sector, $sector_size){} }
class Memory { public function load($boot_address, $hd_data){} }
|
这是三个电脑中的子系统,我们需要写一个总系统来组织它们之间的关系,这其实就是 Facade:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class ComputerFacade { private $cpu; private $ram; private $hd;
public function __construct() { $this->cpu = new CPU(); $this->ram = new Memory(); $this->hd = new HardDrive(); }
public function start() { $this->cpu->freeze(); $this->ram->load(BOOT_ADDRESS, $this->hd->read(BOOT_SECTOR, SECTOR_SIZE)); $this->cpu->jump(BOOT_ADDRESS); $this->cpu->execute(); } }
|
使用:
1 2
| $computer = new ComputerFacade(); $computer->start();
|
门面模式其实就是这么回事,由一个门面(入口)把所有子系统隐藏起来了,只需要操作门面就可以,也可以理解为对外的,别人只知道有个 start 开机键,但是里面是怎么跑的,别人压根不清楚。