Java设计模式之适配器模式详解

Java设计模式之适配器模式详解


一、适配器模式核心思想

核心目标将不兼容的接口转换为客户端期望的接口,解决类之间因接口不匹配而无法协作的问题。如同现实中的电源适配器,让不同规格的插头兼容插座。


二、适配器模式类图(Mermaid)

1. 对象适配器(推荐方式)

持有引用
Client
«interface»
Target
+request()
Adapter
-adaptee: Adaptee
+request()
Adaptee
+specificRequest()

2. 类适配器(需多重继承,Java通过接口实现)

继承(Java需实现接口)
«interface»
Target
+request()
Adapter
+request()
Adaptee
+specificRequest()

三、两种适配器对比

类型 实现方式 优点 缺点
对象适配器 组合被适配对象 灵活,可适配多个类 需维护适配器与目标的关系
类适配器 继承被适配类(或接口) 代码简洁 受限于Java单继承

四、代码实现示例

1. 对象适配器(组合实现)

// 被适配者:第三方SDK的旧接口
class LegacyPrinter {
    public void printDocument(String text) {
        System.out.println("Legacy Printer: " + text);
    }
}

// 目标接口:新系统定义的规范
interface Printer {
    void print(String content);
}

// 适配器
class PrinterAdapter implements Printer {
    private LegacyPrinter legacyPrinter;
    
    public PrinterAdapter(LegacyPrinter legacyPrinter) {
        this.legacyPrinter = legacyPrinter;
    }
    
    @Override
    public void print(String content) {
        legacyPrinter.printDocument(content);  // 转换调用方式
    }
}

// 客户端调用
Printer printer = new PrinterAdapter(new LegacyPrinter());
printer.print("Hello Adapter");  // 输出:Legacy Printer: Hello Adapter

2. 类适配器(接口继承实现)

// 被适配接口
interface OldService {
    void executeOld();
}

// 目标接口
interface NewService {
    void executeNew();
}

// 适配器(同时实现新旧接口)
class ServiceAdapter implements NewService, OldService {
    public void executeOld() {
        System.out.println("Old service logic");
    }
    
    public void executeNew() {
        executeOld();  // 将旧接口逻辑适配到新接口
        System.out.println("Added new logic");
    }
}

// 客户端调用
NewService service = new ServiceAdapter();
service.executeNew();
// 输出:
// Old service logic
// Added new logic

五、模式优缺点分析

✅ 优势

  • 解耦代码:客户端与具体实现分离
  • 复用旧代码:无需修改已有类即可整合
  • 灵活扩展:可同时适配多个不同接口

❌ 缺点

  • 过度使用增加复杂度:可能引入过多适配器类
  • 性能损耗:多一层调用转发

六、典型应用场景

  1. 旧系统升级:将遗留代码适配到新接口规范
  2. 第三方库整合:统一不同SDK的接口调用方式
  3. 接口版本兼容:支持新旧API版本共存
  4. 设备驱动开发:统一不同硬件的操作接口

七、Mermaid序列图(对象适配器流程)

Client Adapter Adaptee request() specificRequest() Client Adapter Adaptee

八、适配器模式 vs 其他模式

模式 核心区别
装饰器模式 增强现有功能,接口相同
代理模式 控制访问,不改变接口
外观模式 简化复杂子系统的统一入口

适配器模式是系统演进过程中的“粘合剂”,合理运用可显著提升代码的兼容性和可维护性。掌握其实现技巧,让新旧组件无缝协作!

如果文章对你有帮助,请帮忙点个关注吧!谢谢啦!

你可能感兴趣的:(设计模式,java,设计模式,适配器模式)