若转载教程,请注明出自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模式同样也有利于简化系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。