外观模式(Facade Pattern):外部与子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口是的这一个子系统更加容易使用。外观模式又称门面模式,它是一种对象结构模式。

模式的结构

外观模式就是让客户端以一种简单的方式来调用比较复杂的系统,来完成一件事情。

/**
*Facade 外观模式
*//**
*摄像机
*/
class Camera
{/***打开摄像机*/public function turnOn(){echo 'Turning on the camera.<br/>';}/***关闭摄像机*/public function turnOff(){echo 'Turning off the camera.<br/>';}/***转到录像机*@param $degrees*/public function rotate($degrees){echo 'Totating the camera by '. $degrees . ' degress.<br/>';}
}/**
*灯光
*/
class Light
{/***开灯*/public function trunOn(){echo 'Turning on the light.<br/>';}/***关灯*/public function turnOff(){echo 'Turning off the light.<br/>';}/***换灯泡*/public function changeBulb(){echo 'Changing the light-bulb.<br/>';}
}/**
*感应器
*/
class Sensor
{/***启动感应器*/public function activate(){echo 'Activating the sensor.<br/>';}/***关闭感应器*/public function deactivate(){echo 'Deactivating the sensor.<br/>';}/***触发感应器*/public function trigger(){echo 'The sensor has been trigged.<br/>';}
}
/**
*警报器
*/
class Alarm
{/***启动警报器*/public function activate(){echo 'Activating the alarm.<br/>';}/***关闭警报器*/public function deactivate(){echo 'Deactivating the alarm.<br/>';}/***触发警报器*/public function trigger(){echo 'The alarm has been trigged.<br/>';}
}/**
*门面类
*/
class SecurityFacade
{//录像机private $_camera1, $_camera2;//灯光private $_light1, $_light2, $_light3;//感应器private $_sensor;//警报器private $_alarm;public function __construct(){$this->_camera1 = new Camera();$this->_canera2 = new Camera();$this->_light1 = new Light();$this->_light2 = new Light();$this->_light3 = new Light();$this->_sensor = new Sensor();$this->_alarm = new Alarm();}public function activate(){$this->_camera1->turnOn();$this->_camera2->turnOn();$this->_light1->turnOn();$this->_light2->turnOn();$this->_light3->turnOn();$this->_sensor->activate();$this->_alarm->activate();}public function deactivate(){$this->_camera1->turnOff();$this->_camera2->turnOff();$this->_light1->turnOff();$this->_light2->turnOff();$this->_light3->turnOff();$this->_sensor->deactivate();$this->_alarm->deactivate();}
}//使用
$_security = new SecurityFacade();
$_security->activate();

PHP设计模式 外观模式(Facade)相关推荐

  1. 设计模式:外观模式(Facade)

    外观模式(Facade)也叫过程模式, 外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式通过定义一个一致的接口,用以屏蔽内部子系 ...

  2. 趣谈设计模式 | 外观模式(Facade):为子系统提供高粒度接口

    文章目录 案例:自动驾驶飞机 外观模式 总结 完整代码与文档 案例:自动驾驶飞机 随着自动驾驶汽车的大卖,特X拉开始把目标转向飞行领域,打算开发出一款能够完全自动行驶的飞机,系统初步的设计如下 我们将 ...

  3. 设计模式.外观模式Facade

    定义 外观模式,一般用在子系统与访问之间,用于对访问屏蔽复杂的子系统调用,采用耳目一新的外观类提供的简单的调用方法,具体的实现由外观类去子系统调用. 外观模式是一种中间件类型的模式,使用外观模式之后子 ...

  4. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  5. 外观模式(Facade)----设计模式

    外观模式(Facade)----设计模式 文章目录 外观模式(Facade)----设计模式 什么是外观模式呢? 外观模式的基本介绍 制造一个影院管理? 实现代码 总结 什么是外观模式呢? 以我们中常 ...

  6. 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  7. 研磨设计模式之外观模式(Facade)(解决方案)

    3.2  解决方案 3.2.1  外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...

  8. php facade模,PHP 设计模式之外观模式 Facade

    简单描述 外观模式(Facade pattern),为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用. 外观模式又称为门面模式,它是一种对象结构型模式,遵循迪米特法则,又称最少知道原则 ...

  9. 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用

    文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...

  10. 外观模式(Facade) - 为系统分层次

    程序面试时经常会碰到系统分层的问题.  要你描述怎样分层, 分层的好处等. 而Java 有个外观模式(facade) 正能帮组我们对系统分层次. 一, 外观模式(Facade) 的定义 所谓外观模式, ...

最新文章

  1. 禁止windows系统的自动运行功能
  2. 汇编语言带C循环,如何将此C for循环转换为汇编语言?
  3. Java(静态)变量和(静态)代码块的执行顺序
  4. 现代软件工程 2012 北航 项目复审模板
  5. 一道六年级数学题,求阴影面积,那我只能用Python代码了
  6. C++ wchar_t
  7. 接 嵌入式设备上的Linux系统开发
  8. 机器学习(一):数据预处理
  9. 科学家用Google Earth发现千年古迹
  10. 黑苹果声音低、有杂音、爆音解决方案
  11. laravel 路由_简单的Laravel路由
  12. Particle Trimming
  13. 计算机在线考试word,大学计算机考试word试题及答案.docx
  14. 卓聚社区,新发现的全能社区
  15. Xshell6|Xftp6 要继续使用此程序,您必须应用最新的更新或使用新版本
  16. mysql定时任务 每日执行存储过程
  17. TF实战QA丨这个问题,我以前也遇到过
  18. php30pro移动电源,30分钟让P30 Pro近满血 华为超级快充移动电源评测:迄今最强“奶妈”...
  19. ZUI易入门Android之客户端适配9.0方案
  20. Android实战 - 音心播放器 (通知实现音乐的播放/暂停/下一曲控制)

热门文章

  1. R语言glmnet交叉验证选择(alpha、lambda)拟合最优elastic回归模型:弹性网络(elasticNet)模型选择最优的alpha值、模型最优的lambda值,最终模型的拟合与评估
  2. R语言PCA主成分分析(Principle Component Analysis)与线性回归结合实战
  3. 支持向量机(SVM):超平面及最大间隔化、支持向量机的数学模型、软间隔与硬间隔、线性可分支持向量机、线性支持向量机、非线性支持向量机、核函数、核函数选择、SMO算法、SVM vs LR、优缺点
  4. html 可以折叠的表格,javascript – html5 – 如何折叠和扩展复杂的表格元素
  5. shutdown -s -t XXX
  6. STM32-RCC内部总线时钟设置程序详讲
  7. 杨桃32开发版最小核心板和底板接口定义以及各io口功能
  8. 3dsmax biped 骨骼的创建和修改
  9. ubuntu18.04.4 安装百度硬盘
  10. 一致性直线提取--Coherent Line Drawing