适配器模式

2021-01-17  本文已影响0人  zzj0990

1. 概念

将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

2.适用场景

适配器模式是一种结构型设计模式,适配器模式主要是来解决接口不兼容的问题,使得原本没有关系的类可以协同工作。就好像我们笔记本电脑的电源适配器,在电压110v-220v之间都是可以正常工作的(那么大一坨),这适配器的工作就是把外部不稳定的电压转化成笔记本电脑能稳定使用的直流电压。

3. 适配器模式角色

适配器有两种分类:1)对象适配器、类(或接口)适配器。在对象适配器模式中,适配器与适配者之间是关联关系;2)在类适配器模式中,适配器与适配者之间是继承(或实现)关系

4. 示例

前些天刚入手一台新手机,满心欢喜啊,掂量一圈发现现在的手机是越来越好看、越来越薄了呀,一开心就想着拿出我的耳机想要沉浸在音乐的世界里,可下一秒蒙圈了,泥马没有耳机孔。原来啊,为了把手机做的更薄、更美,手机厂家牺牲了传统的3.mm耳机插孔,而使用复用充电接口Type-C,这下难道我又要去再搞一条Type-C接口的耳机吗?答案是可以不用,可以买一个接口转换器。

Target目标类 - 要求使用Type-C接口

public interface TypeC {
    void useTypeCPort();
}

Adaptee适配者 - 被适配的对象

public interface Headset {
    void listen();
}

public class CommonHeadset implements Headset {

    @Override
    public void listen() {
        System.out.println("使用3.5mm耳机听音乐...");
    }
}

Adapter适配器 - 把适配对象和目标类关联起来,达到转换的目的

public class CommonHeadsetAdapter implements TypeC {
    private CommonHeadset headset;
    public CommonHeadsetAdapter(CommonHeadset headset){
        this.headset = headset;
    }
    @Override
    public void useTypeCPort() {
        System.out.println("使用Type-C转接头适配3.5mm");
        this.headset.listen();
    }
}

场景类

@Test
public void adapterTest(){
    CommonHeadset headset = new CommonHeadset();
    CommonHeadsetAdapter headsetAdapter = new CommonHeadsetAdapter(headset);
    headsetAdapter.useTypeCPort();
}
输出结果:
使用Type-C转接头适配3.5mm
使用3.5mm耳机听音乐...

5. 总结

  1. 可以让两个没有关系的类在一起运行,引入一个适配器,可以不用修改原有代码
  2. 提高类的复用
  3. 灵活性和扩展性非常好
  1. 修改已投产的接口,可以考虑适配器模式
  2. 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码,可以考虑适配器模式。

适配器模式通常是用来解决系统扩展的问题,属于补偿模式,专门用来在系统后期扩展、修改时使用。

  1. 装饰模式实质增强了原有功能
  2. 适配器模式实质解决复用的问题

————————————————————
坐标帝都,白天上班族,晚上是知识的分享者
如果读完觉得有收获的话,欢迎点赞加关注

上一篇 下一篇

猜你喜欢

热点阅读