门面模式

定义

门面模式是一种结构型模式,它为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统更加容易使用。

门面(Facade)角色

  • 此角色将被客户端调用
  • 知道哪些子系统负责处理请求
  • 将用户的请求指派给适当的子系统

子系统(subsystem)角色

  • 实现子系统的功能
  • 处理由Facade对象指派的任务
  • 没有Facade的相关信息,可以被客户端直接调用
  • 可以同时有一个或多个子系统,每个子系统都不是一个单独的类,而一个类的集合。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并知道门面模式的存在,对于子系统而言,门面仅仅是另一个客户端。

适用性

  • 为一些复杂的子系统提供一组接口
  • 提高子系统的独立性
  • 在层次化结构中,可以使用门面模式定义系统的每一层的接口

一句话理解

通过门面,将多个子系统操作组合成一个供客户端使用的接口

实例

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
/**
* Created by PhpStorm.
* User: Livfer
* Desc:
* Date: 2019/9/18
* Time: 09:51
*/

/**
* 摄像机
* Class Camera
*/
class Camera
{
public function turnOn()
{
echo 'camera turn on';
}

public function turnOff()
{
echo 'camera turn off';
}
}

/**
* 灯光
* Class Light
*/
class Light
{
public function turnOn()
{
echo 'light turn on';
}

public function turnOff()
{
echo 'light turn off';
}
}

/**
* 拍摄门面
* Class CameraFacade
*/
class CameraFacade
{
protected $camera;
protected $light;

public function __construct()
{
$this->camera = new Camera();
$this->light = new Light();
}

public function activeCamera()
{
$this->light->turnOn();
$this->camera->turnOn();
}

public function deactivateCamera()
{
$this->camera->turnOff();
$this->light->turnOff();
}
}

class Client
{
public static function activateCamera()
{
$cameraFacade = new CameraFacade();
$cameraFacade->activeCamera();
}

public function deactivateCamera()
{
$cameraFacade = new CameraFacade();
$cameraFacade->deactivateCamera();
}
}

Client::activateCamera();
Client::activateCamera();

参考

[PHP设计模式详解][http://yansu.org/2014/04/19/design-patterns-of-php.html]