大话设计模式第十二章---外观模式PHP实现

<?php
class Sub_system_one {
    public function method_one() {
        echo "subsystem one method one<br/>";
    }
}
class Sub_system_two {
    public function method_two() {
        echo "subsystem one method two<br/>";
    }
}
class Sub_system_three {
    public function method_three() {
        echo "subsystem one method three<br/>";
    }
}
class Sub_system_four {
    public function method_four() {
        echo "subsystem one method four<br/>";
    }
}

class Facade {
    private $_one;
    private $_two;
    private $_three;
    private $_four;

    public function __construct() {
        $this->_one   = new Sub_system_one();
        $this->_two   = new Sub_system_two();
        $this->_three = new Sub_system_three();
        $this->_four  = new Sub_system_four();
    }

    public function method_A() {
        echo "method group A<br/>";
        $this->_one->method_one();
        $this->_two->method_two();
        $this->_four->method_four();
    }
    public function method_B() {
        echo "method group B<br/>";
        $this->_two->method_two();
        $this->_three->method_three();
    }
}

$facade = new Facade();
$facade->method_A();
$facade->method_B();

外观模式:

  为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。(其实就是多加了一层,把底层代码的实现给封装起来)

何时使用:

  首先,在设计初期阶段,应该要有意识将不同的两个层分离;

  其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖;

  第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展,此时,你可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

时间: 2024-10-11 10:38:30

大话设计模式第十二章---外观模式PHP实现的相关文章

设计模式(十二)外观模式(结构型)

概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子:一个电源总开关可以控制四盏灯.一个风扇.一台空调和一台电视机的启动和关闭.该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计. 问题 为了降低复杂性,常常将系统划分为若干个子系统.但是如何做到各个系统之间的通信和相互依赖关系达到最小呢?  解决方案                                    

大话设计模式第十六章--状态模式

<?php abstract class State { abstract public function handle(Context $context); } class Concrete_state_A extends State { public function handle(Context $context) { echo "NOW IS IN STATE_A <br/>"; $context->state = new Concrete_state_

设计模式之第7章-外观模式(Java实现)

设计模式之第7章-外观模式(Java实现) “鱼哥,知道怎么把大象装进冰箱里面么?”(作者按:这么简单的问题还想考我,早了几百年吧.)“把大象装进冰箱里,一共需要三步:第一步,把冰箱门打开:第二步,把大象装进去,第三步,把冰箱门关上.”(此处模仿本山老师语调,请自行脑补)“恭喜你,回答正确,那么问题来了,要是有一万个大象是不是要走3万步呢?如果有顺序错了是不是就无法正确的装进去了呢?”为了解决这个问题,我-外观模式也就应运而生了.(作者按:一句话都不让我接...) 外观模式之自我介绍 我呢,是一

设计模式(十二)桥模式(Bridge)-结构型

桥模式Bridge引文 根据面向对象的设计原则,应该尽量使用组合而不是继承.桥模式将抽象与其实现解耦,使他们可以分别独立地变化,是继承的一种代替方式. 对于两个类之间需要进行关联时,不要直接在一个类的代码中调用另一个类的代码,而是要通过这些设计模式,在两个类之间建立一个类似的缓冲器的类,从而将直接关联的两个类进行解耦,以保证以后当一个类的接口发生变化时不会影响另一个类的使用. 实现原理图 桥模式实现原理图 桥模式试讲抽象和实现分离实现解耦,使他们可以分别独立地变化.桥模式也是继承关系的一个替代方

设计模式(十二)Decorator模式

Decorator模式就是不断地为对象添加装饰的设计模式.以蛋糕为例,程序中的对象就相当于蛋糕,然后像不断地装饰蛋糕一样地不断地对其增加功能,它就变成了使用目的更加明确的对象. 首先看示例程序的类图. 然后看示例程序代码. 1 package bigjunoba.bjtu.decorator; 2 3 public abstract class Display { 4 5 public abstract int getColumns(); 6 public abstract int getRow

设计模式之十二:状态模式(State)

状态模式: 当一个对象的内部状态发生变化时允许改变它的行为. Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. 状态模式将依赖于状态的行为分离成了各种状态类,每一种特定的转态类只处理单一的行为,并且定义了各种状态之间的转移变迁关系. UML图: 主要包括: Context:定义了客户端需要的接口,操作了一个当前状态类的

大话设计模式第十四章--观察者模式

<?php abstract class Subject { private $_observers = array(); public function attach(Observer $observer) { $this->_observers[] = $observer; } public function detach(Observer $observer) { if (isset($this->_observers[$observer])) { unset($this->

大话设计模式java版本 第二章 策略模式

package strategy; //嵌入策略 public class CashContext { private Cash cs; public CashContext(Cash cs) { super(); this.cs = cs; } public double getResult(double money){ return cs.acceptCash(money); } } package strategy; public interface Cash { public abstr

设计模式之十二:Proxy(代理)—对象结构型模式

2014-05-29 星期四 21:08:37  Proxy,继续GOF.此模式未按GOF编写. c++中使用StringBuilder 1.Intent Provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一种代理以控制对这个对象的访问. 2.Also Known As 3.Motivation 4.Applicability 在以下情况使用适配模式: ● 创建开销大的对象时