PHP设计模式(七)之门面模式
一、什么是外观模式(Facade Pattern)
定义:外观模式又称门面模式,提供一个统一的接口,用来访问子系统中的一群接口。
外部与子系统之间的通信采用门面(Facade)对象来完成。
【举例】比如麦当劳套餐,套餐包含鸡肉卷、汉堡包、可乐等N个单个食物(这就是子系统),而套餐就是门面对象。当我们去点一个套餐时,套餐内的食物(子系统)不会一个一个给你送来,而是等套餐内所有食物做好之后一起送给你。有没有发现,这与工厂模式有些相像。
二、为什么使用外面模式
主要用来简化操作。
三、外观模式结构
外观角色(Facade): 为子系统封装统一的对外接口,如同子系统的一个门面。这个类一般不负责具体的业务逻辑,只是一个委托类,具体的业务逻辑由子系统完成。
子系统(SubSystem): 由多个类组成的具有某一特定功能的子系统。可以是第三方库,也可以是自己的基础库,还可能是一个子服务,为整个系统提供特定的功能或服务。
四、实例解释
继续一贯以来的餐饮。厨房电器摆放位置太乱,严重影响了厨房的整洁,老板决定整改整个电路系统。厨房电器太多,一个一个关掉电源太过于浪费时间,有没有总控?对,总控。于是老板直接关掉了整个厨房的电源系统,这下就方便多了。实际常见的有屋子里的空气开关。
五、代码实现
Freezer.php
<?php
/**
* Freezer 冷藏柜开关 (子系统)
*
*/
class Freezer
{
// 冷藏柜电源 开
public function open()
{
echo '我是冷藏柜,我接通电源了,开始冷藏工作~~';
}
// 冷藏柜电源 关
public function close()
{
echo '我是冷藏柜,我失去电源了,冷藏工作结束~~';
}
}
SteamRiceMachineSwitch.php
<?php
/**
* SteamRiceMachineSwitch 蒸饭车电源开关控制器 (子系统)
*
*/
class SteamRiceMachineSwitch
{
// 蒸饭车电源 开
public function turnOn()
{
echo '我是蒸饭车,我接通电源了,我将为你蒸饭~';
}
// 蒸饭车电源 关
public function turnOff()
{
echo '我是蒸饭车,我接通关闭了,我不再为你蒸饭,你自己想办法去吧~';
}
}
TurnOffFacade.php
<?php
/**
* TurnOffFacade 电源总开关门面
*/
class TurnOffFacade
{
protected $freezer;
protected $steamRiceMachineSwitch;
public function __construct()
{
$this->freezer = new Freezer();
$this->steamRiceMachineSwitch = new SteamRiceMachineSwitch();
}
// 总开
public function on()
{
$this->freezer->open();
$this->steamRiceMachineSwitch->turnOn();
}
// 总关
public function off()
{
$this->freezer->close();
$this->steamRiceMachineSwitch->turnOff();
}
}
index.php
<?php
require_once './Freezer.php';
require_once './SteamRiceMachineSwitch.php';
require_once './TurnOffFacade.php';
$facade = new TurnOffFacade();
$facade->on();
$facade->off();
我是夕阳何处寻,期待和优秀的你一起同行!
夕阳何处寻
2020年01月16日
请登录后再评论