前言

外观模式(Facade Pattern)是一个比较简单的概念,它只是为一个子系统创建一个单一的入口。这样的好处是有助于分离项目中不同的部分,其次,会使得我们在访问代码时变得简洁方便。另外,由于只在一个地方调用子系统,减少了出错的可能性。

外观模式比较简单,这里就不做过多的赘述了,主要是要吸收该模式减少耦合的思想,直接上代码。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php

class SystemA
{
public function operationA()
{
echo "operationA <br>";
}
}

class SystemB
{
public function operationB()
{
echo "operationB <br>";
}
}

class SystemC
{
public function operationC()
{
echo "operationC <br>";
}
}

class Facade
{
protected $systemA;
protected $systemB;
protected $systemC;

function __construct()
{
$this->systemA = new SystemA();
$this->systemB = new SystemB();
$this->systemC = new SystemC();
}

public function myOperation()
{
$this->systemA->operationA();
$this->systemB->operationB();
$this->systemC->operationC();
}
}

$facade = new Facade();
$facade->myOperation();//只通过一个入口调用

总结

使用外观模式最大的优点就是子系统与客户端之间是松耦合的关系,客户端不必知道具体有哪些子系统,也无需知道他们是如何工作的,通过引入一个外观类,提供一个客户端间接访问子系统的高级接口。子系统和外观类可以独立运作,修改某一个子系统的内容,不会影响到其他子系统,也不会影响到外观对象。

不过它的缺点就是它不够灵活,当需要增加一个子系统的时候,需要修改外观类。