走进设计模式的世界7:我们很像但不是一个人好吗?-适配器模式和外观模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35165632/article/details/83862930

适配器模式:

将一个类的接口,转接成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

外观模式:

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

设计原则:最少知识原则:只和你的密友谈话。

解释:当需要使用一个现有的类而其接口并不符合你的需要时,就使用适配器

           当需要简化并统一一个很大的接口或者一群复杂接口时,使用外观

适配器改变接口以符合客户的期望。外观将客户从一个复杂的子系统中解耦。实现一个适配器可能需要一番功夫,也可以不费功夫,视目标接口的大小和复杂度而定。实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行,适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多继承。(java不支持)你可以为一个子系统实现一个以上的外观。适配器将对象包装起来以改变其接口;装饰者将一个对象包装起来增加新的行为和责任;外观将一群对象包装起来以简化其接口。

适配器模式样例:我需要一个根能把我笔记本连接上电脑的线。

/**

    公司的老板找到了mis,
    说我这有一台显示器我想让我的笔记本
    接到这台电脑上双屏工作。
    于是,mis就有了这样的设想

**/


public class Monitor{
    // 这是一条typec的连接线
    private HDMIConnector hdmi;
    
    public Monitor(HDMIConnector connector){
        if(connector==null){
            this.hdmi = new Hdmi();
        }else{
            this.hdmi = connector;
        }
    }

    // 连接方法
    public void connect(){
        // 用笔记本的hdmi线直接脸上电脑
        hdmi.connect();
    }
}


/**
    拿到了电脑的mis万万没有想到,
    老板的电脑比较高级,是只有type-c接口的。
    所以他只能通过各种线去适配这台显示器了
**/

/**
    所以他找来了type-c转hdmi转接盒。
**/
// 把typec接口适配层hdmi接口
public class TypeCToHdmiAdapter implments HDMIConnector{
    private TYPECConnector  connector;

    public TypeCToHdmiAdapter(TYPECConnector connector){
        this.connector = connector;
    }
    
    // 实现接口方法
    public void connect(){
       //转化成hdmi
       connector.toHdmi();    
       //连接显示器
       connector.connectMonitor();
    }

}

mis成功的化解了尴尬,他将typec接口适配成了显示器需要用的hdmi,老板的显示器和老板也明显的不关心到底是怎么连的只知道我可以连接就可以了这就是适配器模式的本质。

外观模式样例:煲汤太麻烦了!!!!

/**
    媳妇心血来潮要给我煲汤
    于是乎我就教了一下她。
**/

public class BaoTang(){
    // 忽略各个实体类,知道就行。 
    // 工具
    private GongJu gongju;
    // 锅具
    private Guo guo;
    // 火
    private Huo huo;
    
    public static void mian(String[]agrs){
        // 开大火
        huo.kaidahuo();
        // 盖上锅盖
        guo.gaishangguogai();
        // 打开锅盖
        guo.dakaiguogai();
        // 去浮沫
        gongju.qufumo();
        // 开小火
        huo.kaixiaohuo();
        // 关火
        huo.guanhuo();
    }

}


/**
    媳妇听的头都大了,于是去超市买了个自动汤锅
**/
public class HuBoEr(){
    // 忽波尔汤锅有如下功能
    public void zhutang(){
        ...
        ...
    }
}

public class BaoTang(){
    
    public static void mian(String[]agrs){
        HuBoEr huboer = new HuBoEr();
        huboer.zhutang();
    }
}


这里的胡泊尔汤锅就是一个外观模式很好的例子,别人只要调用一个方法就可以完成一些列的宏操作。

简化了接口。但是如果人们仍然想用原来的接口也并不耽误使用。

总结:外观不只是简化了接口,也将客户从组件的子系统中解耦。外观和适配器可以包装许多类,但是外观的意图是简化接口,而适配器的意图是将接口转化成不同的接口。外观可以封装很多套,适配器也可以有很多个,灵活而简易。

猜你喜欢

转载自blog.csdn.net/qq_35165632/article/details/83862930