0%

设计模式之外观模式

穷则独善其身,达则兼济天下。 —— 《孟子》之《尽心章句上》(第九)

一、概念

  1. 外观模式(Facade Pattern),一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。

    • 该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
    • 该模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
  2. 优点

    • 减少系统相互依赖
    • 提高灵活性
    • 提高了安全性。
  3. 缺点

    • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
  4. 适用场景

    • 为复杂的模块或子系统提供外界访问的模块
    • 子系统相对独立
    • 预防低水平人员带来的风险

二、demo

  1. 定义类
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
50
51
52
53
54
55
56
interface Shape
{
public function draw();
}

class Circle implements Shape
{
public function draw()
{
echo "圆形", PHP_EOL;
}
}

class Square implements Shape
{
public function draw()
{
echo "正方形", PHP_EOL;
}
}

class Triangle implements Shape
{
public function draw()
{
echo "三角形", PHP_EOL;
}
}

class ShapeFacade
{
private $circle;
private $triangle;
private $square;

public function __construct()
{
$this->circle = new Circle();
$this->triangle = new Triangle();
$this->square = new Square();
}

public function drawCircle(){
$this->circle->draw();
}

public function drawSquare()
{
$this->square->draw();
}

public function drawTriangle()
{
$this->triangle->draw();
}
}
  1. 调用
1
2
3
4
$shape = new ShapeFacade();
$shape->drawCircle();
$shape->drawSquare();
$shape->drawTriangle();