掌握设计模式--适配器模式

适配器模式(Adapter Pattern)

适配器模式是一种结构型设计模式,用于将一种接口转换为客户端期望的另一个接口,使得原本因接口不兼容而无法一起工作的类可以协同工作。适配器为中间者,连接着两个互不相容的接口,从而实现接口的适配。

核心思想:在不改变现有代码的情况下,将一个类的接口转换为客户端期望的接口。

主要组成部分

适配器模式包含以下主要角色:

  1. 目标接口(Target):定义客户端使用的接口;
  2. 需要适配的类(Adaptee):一个现有的接口或类,其接口与目标接口不兼容;
  3. 适配器(Adapter) :一个中间层,连接目标接口和需要适配的类,实现接口的转换;
  4. 客户端(Client):通过目标接口使用适配器的功能。

一句话概括适配器组成之间的关系:

一般情况下,适配器目标接口具体实现类,实现的具体功能是通过调用需要适配的类的功能来完成。

适配器模式的两种实现方式

类适配器(基于继承)

通过继承需要适配的类,并实现目标接口。(多用于单继承语言,例如Java)

对象适配器(基于组合)

通过组合一个需要适配的类的实例,并实现目标接口。(推荐使用,灵活性更高)

案例实现

场景为:插头适配器

假设你有一个旧接口为两孔插头,现在需要适配为新的电源插头接口(三孔插头)。

目标接口--适配器--需要适配的类,这三者的关系为客户端要使用适配类(三孔插头),但是无法直接插入两孔插头的插座,需要先插入适配器,然后再将适配器插入两孔插头,所以他们的连接关系为:需要适配的类>>>适配器>>>目标接口。

案例类图

类适配的类图(基于继承)

对象适配的类图(基于组合)

目标接口(Target)

两孔插头

java 复制代码
public interface TwoPinPlug {
    void connect();
}

被适配类(Adaptee)

三孔插头--接口

java 复制代码
public interface ThreePinPlug {
    void connectWithThreePins();
}

三孔插头--具体实现类

java 复制代码
public class ThreePinPlugImpl implements ThreePinPlug {
    public void connectWithThreePins() {
        System.out.println("连接三孔插头");
    }
}

类适配器(Adapter - 继承)

通过继承来实现的适配器

java 复制代码
public class PlugAdapter extends ThreePinPlug implements TwoPinPlug {
    @Override
    public void connect() {
        super.connectWithThreePins(); // 转换三孔插头的接口为两孔插头接口
    }
}

对象适配器(Adapter - 组合)

通过组合的方式来实现的适配器

java 复制代码
public class PlugAdapter2 implements TwoPinPlug {
    private ThreePinPlug threePinPlug;

    public PlugAdapter2(ThreePinPlug threePinPlug) {
        this.threePinPlug = threePinPlug;
    }

    @Override
    public void connect() {
        threePinPlug.connectWithThreePins(); // 转换三孔插头的接口为两孔插头接口
    }
}

客户端代码

java 复制代码
public class AdapterPatternDemo {
    public static void main(String[] args) {
        // 使用类适配器
        TwoPinPlug adapter1 = new PlugAdapter();
        adapter1.connect();

        // 使用对象适配器
        ThreePinPlug threePinPlug = new ThreePinPlugImpl();
        TwoPinPlug adapter2 = new PlugAdapter2(threePinPlug);
        adapter2.connect();
    }
}

执行结果

连接三孔插头

连接三孔插头

总结

适配器模式通过引入中间层(适配器),将不兼容的接口转换为客户端需要的接口,实现系统的兼容性和灵活性。

适用场景:当现有类的接口与需求接口不兼容时;当需要将多个不同接口的类统一为同一个接口时;当不修改已有代码且需要与新需求兼容时。

什么是设计模式?

设计模式--原型模式及其编程思想

掌握设计模式--单例模式及其思想​

掌握设计模式--生成器模式

掌握设计模式--简单工厂模式

掌握设计模式--工厂方法模式

掌握设计模式--抽象工厂模式

掌握设计模式--装饰模式

掌握设计模式--组合模式


超实用的SpringAOP实战之日志记录

2023年下半年软考考试重磅消息

通过软考后却领取不到实体证书?

计算机算法设计与分析(第5版)

Java全栈学习路线、学习资源和面试题一条龙

软考证书=职称证书?

软考中级--软件设计师毫无保留的备考分享

相关推荐
JINGWHALE14 小时前
设计模式 行为型 策略模式(Strategy Pattern)与 常见技术框架应用 解析
前端·人工智能·后端·设计模式·性能优化·系统架构·策略模式
苹果5 小时前
C++二十三种设计模式之建造者模式
c++·设计模式·建造者模式
重生之绝世牛码5 小时前
Java设计模式 —— 【行为型模式】策略模式(Strategy Pattern) 详解
java·大数据·开发语言·设计模式·策略模式
玉面小君5 小时前
C# 设计模式(行为型模式):解释器模式
设计模式·c#·解释器模式
JINGWHALE15 小时前
设计模式 行为型 观察者模式(Observer Pattern)与 常见技术框架应用 解析
前端·人工智能·后端·观察者模式·设计模式·性能优化·系统架构
渊渟岳5 小时前
掌握设计模式--桥接模式
设计模式
肘击鸣的百k路6 小时前
设计模式和原则
java·前端·设计模式
小小小妮子~9 小时前
设计模式七大设计原则Java 实践
java·设计模式
咖啡の猫15 小时前
原型模式详解与实践
设计模式·原型模式
青岚岁叶18 小时前
设计模式——泛型单例类
单例模式·设计模式·unity3d