美文网首页
外观模式

外观模式

作者: spike15 | 来源:发表于2016-04-25 16:58 被阅读0次

    外观模式是一种结构型模式,它为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层次的接口,使得子系统更加容易使用。

    主要角色
    外观(Facade)角色

    • 此角色将被客户端调用
    • 知道哪些子系统负责处理请求
    • 将用户的请求指派给适当的子系统

    子系统(subsystem)角色

    • 实现子系统的功能
    • 处理由Facade对象指派的任务
    • 没有Facade的相关信息,可以被客户端直接调用
    • 可以同时有一个或多个子系统,每个子系统都不是一个单独的类,而一个类的集合。每个子系统都可以被客户端直接调用,或者被外观角色调用。子系统并知道外观模式的存在,对于子系统而言,外观仅仅是另一个客户端。

    适用性

    • 为一些复杂的子系统提供一组接口
    • 提高子系统的独立性
    • 在层次化结构中,可以使用外观模式定义系统的每一层的接口

    优点

    • 它对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便
    • 实现了子系统与客户之间的松耦合关系
    • 如果应用需要,它并不限制它们使用子系统类。因此可以在系统易用性与能用性之间加以选择

    类图

    实例

    
    class HomeTheaterFacade
    {
        private $amp;
        private $tuner;
        private $dvd;
        private $projector;
        private $screen;
        private $popper;
    
        public function __construct(Amplifier $amp, Tuner $tuner, DvdPlayer $dvd, Projector $projector, Screen $screen, PopcornPopper $popper)
        {
            $this->amp = $amp;
            $this->tuner = $tuner;
            $this->dvd = $dvd;
            $this->projector = $projector;
            $this->screen = $screen;
            $this->popper = $popper;
        }
    
        public funtion watchMoive()
        {
            $this->pop->on();
            $this->pop->pop();
            $this->screen->down();
            $this->projector->on();
            $this->projector->wideScreenMode();
            $this->amp->on();
            $this->amp->setDvd($dvd);
            $this->dvd->on();
            $this->dvd->play();
        }
    
        public function endMoive()
        {
            ... 
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:外观模式

          本文链接:https://www.haomeiwen.com/subject/uvcqrttx.html