<?php
/**
* 2.5 外观模式
* 定义:
* 为子系统中的一组接口提供一个一致的界
* 面,Facade模式定义了一个高层接口,这
* 个接口使得这一子系统更加容易使用。
* 角色:
* 1. 外观类
* 职责:知道哪些子系统类负责处理请
* 求,将客户的请求代理给适当
* 的子系统对象。
* 2. 子系统类
* 职责:实现子系统的功能,处理外观
* 对象指派的任务,注意子类中
* 没有外观对象任何信息,即没
* 有对外观对象的引用。
*
* 优点:
* 1. 它对客户屏蔽子系统组件,因而减少了
* 客户处理对象的数目,并使得子系统使
* 用起来更加方便;
* 2. 它实现了子系统与客户之间的松耦合关
* 系,而子系统内部的功能组件往往是紧
* 密耦合的,这样当子系统功能组件发生
* 变化的时候,只需要修改外观类的实现
* 就可以了,避免了程序代码的“散弹式”
* 修改。
* 3. 同时,外观类并不限制客户直接使用子
* 系统的功能组件,如果客户想使用子系
* 统的更加高级的功能,可以越过外观类
* 直接访问子系统的类。
* 缺点:
* 1. 过多的或者不太合理的Faade也容易让
* 人迷惑。到底是调用Faade好呢,还是
* 直接调用子系统的模块好呢。
* 使用场景:
* 1. 当要为访问一系列复杂的子系统提供一
* 个简单入口时可以使用外观模式。
* 2. 客户端程序与多个子系统之间存在很大
* 的依赖性。引入外观类可以将子系统与
* 客户端解耦,从而提高子系统的独立性
* 和可移植性。
* 3. 在层次化结构中,可以使用外观模式定
* 义系统中每一层的入口,层与层之间不
* 直接产生联系,而通过外观类建立联系,
* 降低层之间的耦合度。
*
*/
//具体的股票和房地产类
class Stock1{
public function Sell(){
echo '股票1卖出<br/>';
}
public function buy(){
echo '股票1买入<br/>';
}
}
class Stock2{
public function sell(){
echo '股票2卖出<br/>';
}
public function buy(){
echo '股票2买入<br/>';
}
}
class Realty1{
public function sell(){
echo '房地产卖出<br/>';
}
public function buy(){
echo '房地产买入<br/>';
}
}
//基金类――外观类
class Fund{
public $stock1;
public $stock2;
public $realty1;
public function __construct(){
$this->stock1=new Stock1();
$this->stock2=new Stock2();
$this->realty1=new Realty1();
}
public function sell(){
$this->stock1->sell();
$this->stock2->sell();
$this->realty1->sell();
}
public function buy(){
$this->stock1->buy();
$this->stock2->buy();
$this->realty1->buy();
}
}
//客户端
$fund=new Fund();
$fund->sell();
$fund->buy();
?>
转载于:https://blog.51cto.com/noican/1614778