美文网首页
适配器模式

适配器模式

作者: zzj0990 | 来源:发表于2021-01-17 10:53 被阅读0次

1. 概念

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

2.适用场景

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

3. 适配器模式角色

  • 目标类(Target):定义客户所需接口,可以是一个抽象类或接口,也可以是具体类
  • 适配者(Adaptee):或者叫源对象,需要被适配的角色,它是已经存在的类或对象,适配者类一般是一个具体类
  • 适配器(Adapter):它的职责就是要把适配者转换成目标角色,对Adaptee和Target进行适配

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

  • 对象适配器


    屏幕快照 2021-01-17 上午10.20.07.png
  • 类适配器
    划重点——直接继承太粗暴,要尽量多聚合少继承,所以更提倡使用上面的对象适配器方式
    屏幕快照 2021-01-17 上午10.20.20.png

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. 适配器模式实质解决复用的问题

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

相关文章

  • Java设计模式(二)

    talk is cheap show me the code 适配器模式 类适配器模式 接口适配器模式 对象适配器...

  • 适配器模式

    目录 1、什么是适配器模式? 2、适配器模式结构? 3、如何实现适配器模式? 4、适配器模式的特点? 5、适配器模...

  • 设计模式之适配器模式

    适配器模式: 类适配器模式、对象适配器模式、接口适配器模式 1.类适配器模式:新的接口出现了,但是和老的接口不兼容...

  • 学习iOS设计模式第一章 适配器(Adapter)

    今天学习了iOS设计模式中的适配器模式,适配器有两种模式对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包...

  • 第4章 结构型模式-适配器模式

    一、适配器模式简介 二、适配器模式的优点 三、适配器模式的实例

  • 设计模式(Design Patterns)适配器模式(Adapt

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 类的适配器模式 场景:将一个类转换成...

  • 适配器模式

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。适配器模式将某个类的接口转换成客户端期...

  • 适配器模式

    先直观感受下什么叫适配器 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。 类适配器模式 对象适配器模...

  • 适配器模式

    适配器模式 一、适配器模式定义 适配器模式的定义是,Convert the interface of a clas...

  • 设计模式:结构型

    享元模式 (Pools,Message) 代理模式 适配器模式 :类适配器和对象适配器 装饰者模式 外观模式 桥接...

网友评论

      本文标题:适配器模式

      本文链接:https://www.haomeiwen.com/subject/hdraaktx.html