哎禹供 发表于 2025-6-6 14:12:18

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

适配器模式(Adapter Pattern)

适配器模式是一种结构型设计模式,用于将一种接口转换为客户端期望的另一个接口,使得原本因接口不兼容而无法一起工作的类可以协同工作。适配器为中间者,连接着两个互不相容的接口,从而实现接口的适配。
核心思想:在不改变现有代码的情况下,将一个类的接口转换为客户端期望的接口。
主要组成部分

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

[*]目标接口(Target):定义客户端使用的接口;
[*]需要适配的类(Adaptee):一个现有的接口或类,其接口与目标接口不兼容;
[*]适配器(Adapter):一个中间层,连接目标接口和需要适配的类,实现接口的转换;
[*]客户端(Client):通过目标接口使用适配器的功能。
一句话概括适配器组成之间的关系:
一般情况下,适配器是目标接口的具体实现类,实现的具体功能是通过调用需要适配的类的功能来完成。
适配器模式的两种实现方式

类适配器(基于继承)

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

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

场景为:插头适配器
假设你有一个旧接口为两孔插头,现在需要适配为新的电源插头接口(三孔插头)。
目标接口--适配器--需要适配的类,这三者的关系为客户端要使用适配类(三孔插头),但是无法直接插入两孔插头的插座,需要先插入适配器,然后再将适配器插入两孔插头,所以他们的连接关系为:需要适配的类>>>适配器>>>目标接口。
案例类图

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

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

目标接口(Target)

两孔插头
public interface TwoPinPlug {
    void connect();
}被适配类(Adaptee)

三孔插头--接口
public interface ThreePinPlug {
    void connectWithThreePins();
}三孔插头--具体实现类
public class ThreePinPlugImpl implements ThreePinPlug {
    public void connectWithThreePins() {
      System.out.println("连接三孔插头");
    }
}类适配器(Adapter - 继承)

通过继承来实现的适配器
public class PlugAdapter extends ThreePinPlug implements TwoPinPlug {
    @Override
    public void connect() {
      super.connectWithThreePins(); // 转换三孔插头的接口为两孔插头接口
    }
}对象适配器(Adapter - 组合)

通过组合的方式来实现的适配器
public class PlugAdapter2 implements TwoPinPlug {
    private ThreePinPlug threePinPlug;

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

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

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全栈学习路线、学习资源和面试题一条龙
软考证书=职称证书?
软考中级--软件设计师毫无保留的备考分享

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 掌握设计模式--适配器模式