适配器模式

参考《JAVA与模式》之适配器模式

用电源接口做例子,笔记本电脑的电源一般都是接受5V的电压,但是我们生活中的电线电压一般都是220V的输出。这个时候就出现了不匹配的状况,在软件开发中我们称之为接口不兼容,此时就需要适配器来进行一个接口转换。在软件开发中有一句话正好体现了这点:任何问题都可以加一个中间层来解决。这个层我们可以理解为这里的Adapter层,通过这层来进行一个接口转换就达到了兼容的目的。

在GOF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。类适配器模式通过多重继承进行匹配,但除了C++支持多重继承,其它语言多不支持。对象适配器使用对象组合的方式,是动态组合的方式,只要对象类型正确,是不是子类都无所谓。建议尽量使用对象适配器的实现方式,多用合成/聚合、少用继承。

一、类适配器
//Target角色
public interface FiveVolt {
    public int getVolt5();
}

//Adaptee角色,需要被转换的对象
public class Volt220 {
    public int getVolt220() {
        return 220;
    }
}
// adapter角色
public class ClassAdapter extends Volt220 implements FiveVolt {
    @Override
    public int getVolt5() {
        return 5;
    }
}
二、对象适配器
//Target角色
public interface FiveVolt {
    public int getVolt5();
}
//Adaptee角色,需要被转换的对象
public class Volt220 {
    public int getVolt220() {
        return 220;
    }
}
// 对象适配器模式
public class ObjectAdapter implements FiveVolt {
    Volt220 mVolt220;
    public ObjectAdapter(Volt220 adaptee) {
        mVolt220 = adaptee;
    }
    public int getVolt220() {
        return mVolt220.getVolt220();
    }
    @Override
    public int getVolt5() {
        return 5;
    }
}

个人理解:新建一个类去实现目标接口的方法,其实在内部持有了一个老对象,表面上调用了新接口方法,实际还是偷偷地用老对象的方法去实现。

三、优缺点
  • 适配器模式的优点

    • 更好的复用性
      系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
    • 更好的扩展性
      在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
  • 适配器模式的缺点
    过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容