《head first》设计模式day seven适配器、外观模式

生活中的我们遇到的适配器最多的就是之前港版mac的转接头了,因为香港和我们大陆的电源插头标准不一样,所以需要一个转换接头,现在我们经常会在mac上看到转接头,毕竟mac的硬件标准和微软的可能还是有一些区别

适配器模式:把一个类的接口转换为客户需要的另一个接口,适配器让原本不兼容的类可以合作无间

基本类图入下


我们看到mac需要充电,目前只有一个香港的充电器在身边,但是大陆的插座和香港的充电器是不一样的,我们要把香港的充电插头经过适配器转换为大陆的插头。

class Computer{
    StandardInterface CHcharger;
    void charging(){//充电
         CHcharger.standardMethod();
    }
    public Computer(StandardInterface charger){
         this.CHCharger= charger;
    }
}

interface StandardInterface{
   void standardMethod()
}

interface ConcerateInterface{
    unStandardMethod();
}

class HKCharger implements ConcerateInterface{
   void unStandardMethod(){
       syso("HK is 香港,是祖国的一部分")
   }
}

class Adapter implements StandardInterface{
    private ConcerateInterface concerate;
    public Adapter(ComcerateInterface interface){
        this.concerate = interface;
}
    void standardMethod(){
         syso("CH 是中国,中国标准");
         concerate.unStandardMethod();
    }
}

那现在我们经过包装,就可以把adater赋值给Computer ,暂时使用香港充电器为我们电脑充电。

上面讲到的是 对象适配器模式,其实适配器还有一种类适配器模式,就是要adapter同时继承 两个标准,即Adapter类实现StandardInterface 和  UnStandardInterface两个接口(不过类适配器书中没有仔细讲,我也不敢再谬论);

外观模式  Facade Pattern ,我们系统中会有专门的facade层对外提共服务,

外观模式的定义:提供了一个统一的接口,来访问子系统中的一群接口,外观模式定义了一个高层接口,让子系统更容易使用。我们从项目结构看 console要获取用户的全部信息,要依赖四个系统,分别获取信息,如果以后我们多了信用系统,还要改动console代码,添加credit系统。


console觉得好难过,因为他要面对这么多系统,更麻烦的是,用户如果做了注销操作,他要一次注销四个系统的数据。如果一个不注意,少更新了哪个系统,那就麻烦了。

这个时候我们要介绍一个设计原则:最少知识原则。调用者不想知道那么多细节,只要发出命令,把具体执行包装起来,也符合解耦的要求,我们可以选择外观模式:


在四个子系统上面添加一个facade接口,整合信息,console可以直接调用。其实知识把工作下放到facade里面,让console从业务整合中解耦出来,可以更好的实现别的服务。

---------------------------------------------------分割线------------------------------------------------------

装饰则模式:Wrapper  :装饰某个类,添加新的责任(行为)  

适配器模式:Adapter    : 把一个接口转换为另一个接口      

外观模式:   Facade     :提供一个接口,统一访问子系统的接口.  

不能简单地认为适配器和外观模式的区别是指接口的数量,而应该明确适配器是转换成现成的标准接口。而外观模式是要我们自己重新定义一个标准接口。

猜你喜欢

转载自blog.csdn.net/David_lou/article/details/79295843