码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之结构型模式—— 2.5 外观模式

时间:2015-02-17 23:43:31      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:设计模式 外观模式

<?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();

?>


本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614778

设计模式之结构型模式—— 2.5 外观模式

标签:设计模式 外观模式

原文地址:http://noican.blog.51cto.com/4081966/1614778

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!