适配器模式 (Adapter) · 对象适配器 · 类适配器 · 实际开发中的应用

引言

在软件开发中,我们经常会遇到"现有类不能直接匹配目标接口"的情况。此时,为了在不改变现有类的情况下完成接口匹配,适配器模式 (Adapter) 应运而生。

适配器模式是一种结构型设计模式,它通过创建一个适配器类,将一个接口转化为客户端期望的另一个接口,从而实现兼容。


适配器模式的核心概念

适配器模式有两种主要实现方式:

  1. 类适配器:基于继承实现适配。
  2. 对象适配器:基于组合实现适配。

适配器模式的结构

  • 目标接口 (Target):定义客户端需要的接口。
  • 适配者 (Adaptee):定义一个已经存在的接口,需要适配。
  • 适配器 (Adapter) :将 Adaptee 的接口转换为 Target 接口。

类适配器

类适配器通过继承适配者类实现适配。

示例代码

需求:假设我们有一个充电接口 MicroUSB,但新设备只支持 TypeC。需要用适配器让 MicroUSB 设备兼容 TypeC

java 复制代码
// 目标接口 (Target)
public interface TypeC {
    void chargeWithTypeC();
}

// 适配者 (Adaptee)
public class MicroUSB {
    public void chargeWithMicroUSB() {
        System.out.println("Charging with MicroUSB...");
    }
}

// 类适配器 (Adapter)
public class MicroUSBToTypeCAdapter extends MicroUSB implements TypeC {
    @Override
    public void chargeWithTypeC() {
        System.out.println("Adapter converting TypeC to MicroUSB...");
        chargeWithMicroUSB();
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) {
        TypeC typeCDevice = new MicroUSBToTypeCAdapter();
        typeCDevice.chargeWithTypeC();
    }
}

UML 类图

<<interface>> TypeC +chargeWithTypeC() MicroUSB +chargeWithMicroUSB() MicroUSBToTypeCAdapter +chargeWithTypeC()


对象适配器

对象适配器通过组合适配者类实现适配。

示例代码

与类适配器相同的需求,但实现方式改为对象适配器。

java 复制代码
// 目标接口 (Target)
public interface TypeC {
    void chargeWithTypeC();
}

// 适配者 (Adaptee)
public class MicroUSB {
    public void chargeWithMicroUSB() {
        System.out.println("Charging with MicroUSB...");
    }
}

// 对象适配器 (Adapter)
public class MicroUSBToTypeCAdapter implements TypeC {
    private final MicroUSB microUSB;

    public MicroUSBToTypeCAdapter(MicroUSB microUSB) {
        this.microUSB = microUSB;
    }

    @Override
    public void chargeWithTypeC() {
        System.out.println("Adapter converting TypeC to MicroUSB...");
        microUSB.chargeWithMicroUSB();
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) {
        MicroUSB microUSBDevice = new MicroUSB();
        TypeC typeCDevice = new MicroUSBToTypeCAdapter(microUSBDevice);
        typeCDevice.chargeWithTypeC();
    }
}

UML 类图

<<interface>> TypeC +chargeWithTypeC() MicroUSB +chargeWithMicroUSB() MicroUSBToTypeCAdapter -MicroUSB microUSB +chargeWithTypeC()


适配器模式的优缺点

优点

  1. 兼容性强:实现新旧接口的无缝衔接。
  2. 灵活性好:对象适配器模式可以实现多个适配者的适配。

缺点

  1. 类适配器:继承导致与适配者的耦合度较高。
  2. 对象适配器:需要引入额外的适配器对象。

实际开发中的应用

  1. 日志框架适配
    比如在切换日志框架时,用适配器封装旧框架的接口,转化为新框架的标准接口。
  2. 支付网关适配
    支付网关可能需要适配不同银行或第三方支付服务的接口。
  3. 数据转换工具
    将一种格式的数据转化为另一种格式,比如 XML 转 JSON。

总结

适配器模式在开发中非常常见,尤其是在需要对接第三方接口、实现旧代码兼容时,表现出很高的实用价值。类适配器和对象适配器各有优缺点,开发者应根据实际需求选择合适的实现方式。

适配器模式的核心就是兼容性和复用性

相关推荐
RainbowSea7 小时前
12. LangChain4j + 向量数据库操作详细说明
java·langchain·ai编程
RainbowSea7 小时前
11. LangChain4j + Tools(Function Calling)的使用详细说明
java·langchain·ai编程
考虑考虑11 小时前
Jpa使用union all
java·spring boot·后端
用户37215742613511 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊12 小时前
Java学习第22天 - 云原生与容器化
java
渣哥14 小时前
原来 Java 里线程安全集合有这么多种
java
间彧14 小时前
Spring Boot集成Spring Security完整指南
java
间彧14 小时前
Spring Secutiy基本原理及工作流程
java
Java水解15 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆18 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试