<?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(); ?>
时间: 2024-10-11 07:11:31