一、什么是外观模式(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日

转载:感谢您对自如初博客网站的认可,所有文章均属原创文章,技术类文章转载请注明出处,“自如初博客”;文学类文章请带文本链接地址,否则视为侵权!

很赞哦!(6)

php设计之初用于什么,PHP设计模式(七)之门面模式相关推荐

  1. 门面设计模式php,学习php设计模式 php实现门面模式(Facade)

    这篇文章主要介绍了php设计模式中的门面模式,使用php实现门面模式,感兴趣的小伙伴们可以参考一下 一.意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统 ...

  2. 大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)...

    一,总体概要 1,笔者浅谈 说起"门面"这个设计模式其实不论新老程序猿都是在无意中就已经运用到此模式了,就像我们美丽的JS程序员一样不经意就使用了闭包处理问题, 1 functio ...

  3. .net 有哪些主流的设计模式_「设计模式自习室」门面模式 Facade Pattern

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  4. Java设计模式-结构型-门面模式

    目录 前言 示例 前言 门面模式(也叫外观模式,Facade Pattern)在许多源码中有使用,比如 slf4j 就可以理解为是门面模式的应用.这是一个简单的设计模式,我们直接上代码再说吧. 示例 ...

  5. 设计模式之禅——门面模式

    门面模式[Facade Pattern]也叫外观模式,是一种比较常用的封装模式,其定义如下: [要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式提供一个高层次的接口,使得子系统更 ...

  6. java设计模式总结七:门面模式

    门面模式定义 门面模式也称外观模式,门面模式实现了子模块和客户端之间的松耦合关系,从而屏蔽了子模块内部的实现细节.只是将客户端需要的接口提供给客户,这样一来子模块组件如果发生变化,修改接口就可以了,不 ...

  7. 设计模式系列:门面模式

    引入 大家有没有比较过自己泡茶喝去茶馆喝茶的区别呢?自己泡茶需要自行准备茶叶.茶具和开水,而去茶馆喝茶,最简单的方式就是跟茶馆服务员说想要一杯什么样的茶(铁观音.碧螺春等等).正因为茶馆有服务员,顾客 ...

  8. 【设计模式自习室】门面模式 Facade Pattern

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  9. 设计一个扩展自抽象类geometricobject_设计模式4之模板方法模式

    背景 在开发中,你肯定有遇到过这样一种场景:你知道某个方法的关键步骤以及执行顺序,但是里面有的具体步骤并清楚.你会怎么做? 比如你早上起床到公司,我们分解步骤: "起床洗漱吃早餐乘坐交通工具 ...

最新文章

  1. Android studio Merge 标签 显示错乱
  2. 4.Eclipse的安装和使用
  3. 内存拷贝函数的深入思考
  4. 服务中心Eureka
  5. Linux下 执行程序
  6. fastai学习:02_production Questionnaire
  7. 微信扫码登录网页实现原理
  8. Windows安全加固系列
  9. Ubuntu安装minicom串口工具
  10. 程序员100套简历模板,全网最全
  11. 30套精选程序员个人简历模板.zip
  12. BOSS直聘数据采集、解析处理、分析与可视化实战
  13. linux 硬盘自动休眠,【Linux】硬盘休眠
  14. 倾斜摄影测量和游戏的未来
  15. 解析阿里“聚石塔”产品
  16. php数据降序索引,MySQL 降序索引 (Descending Indexes)
  17. Python数据分析-时间序列预测法
  18. 【Java EE】-Servlet(一) 创建Maven下的webapp项目
  19. DolphinDB 助力 WILLIAM O’NEIL 笑傲股市
  20. yolov5的多摄像头检测

热门文章

  1. ppython_Python pcom包_程序模块 - PyPI - Python中文网
  2. python字母变成数字怎么办_在Python中将字母转换为数字
  3. 一个websocket 可以多个页面创建吗_实战分享|给我一个Puppeteer,没有爬不了的网站
  4. Java中List排序的3种方法!
  5. Java面试详解(2020版):500+ 面试题和核心知识点详解
  6. 使用SQL Server作业设置定时任务
  7. 近百家公司高级运维的面试题汇总
  8. python RSA加密、解密、签名
  9. 频段表_5G频段范围之:频段3.3GHz-4.2GHz (n77,n78)
  10. LaTeX的安装教程及问题记录