若转载教程,请注明出自SW-X框架官方文档!
<?php/*** 设计模式之外观模式* 场景:依赖注入, 依赖外观类去调用第三方类的方法,缺点是多次调用会重复占用内存,可配合享元模式实现依赖注入。* 小黄牛*/header("Content-type: text/html; charset=utf-8");/*** 动物接口*/interface AnimalInterface{public function Produce(); // 生产方法}/*** 创建 - 鸡模型*/class ChiCken implements AnimalInterface{public function Produce(){echo "这是一只鸡~<br/>";}}/*** 创建 - 猪模型*/class Pig implements AnimalInterface{public function Produce(){echo "这是一只猪~<br/>";}}/*** 外观类*/class AnimalMaker{private $_chicken; // 鸡模型实例private $_pig; // 猪模型实例public function __construct(){$this->_chicken = new Chicken();$this->_pig = new Pig();}/*** 生产鸡*/public function produceChicken(){$this->_chicken->produce();}/*** 生产猪*/public function producePig(){$this->_pig->produce();}}# 初始化外观类$animalMaker = new AnimalMaker();# 生产一只猪$animalMaker->producePig();# 生产一只鸡$animalMaker->produceChicken();
浏览器输出
这是一只鸡~这是一只猪~
享元模式
门面(FacadeCompany)角色:此角色封装一个高层接口,将客户端的请求代理给适当的子系统对象,是门面模式的核心接口。子系统(ICBC)角色:实现子系统的具体功能,处理FacadeCompany对象指派的任务。子系统没有FacadeCompany的任何信息,没有对FacadeCompany对象的引用。
优势
1、它可以对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。2、 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合关系使得子系统的组件变化不会影响到它的客户。 Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。3、 Facade模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候尤为重要。在大型软件系统中降低编译依赖性至关重要。在子系统类改变时,希望尽量减少重编译工作以节省时间。用Facade可以降低编译依赖性,限制重要系统中较小的变化所需的重编译工作。4、Facade模式同样也有利于简化系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。
