适配器模式 (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。

总结

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

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

相关推荐
敲代码中5 分钟前
Maven入门到精通
java·maven
常利兵6 分钟前
Kotlin作用域函数全解:run/with/apply/let/also与this/it的魔法对决
android·开发语言·kotlin
幼稚园的山代王19 分钟前
Kotlin-基础语法练习一
android·开发语言·kotlin
拂晓银砾25 分钟前
Java数据结构-队列
java·数据结构
重生成为编程大王26 分钟前
Java ConcurrentHashMap 深度解析
java·开发语言
阿华的代码王国34 分钟前
【Android】适配器与外部事件的交互
android·xml·java·前端·后端·交互
MacroZheng43 分钟前
还在用WebSocket实现即时通讯?试试MQTT吧,真香!
java·spring boot·后端
稚辉君.MCA_P8_Java1 小时前
豆包 Java的23种设计模式
java·linux·jvm·设计模式·kubernetes
tanyongxi661 小时前
C++ 特殊类设计与单例模式解析
java·开发语言·数据结构·c++·算法·单例模式
遗憾皆是温柔1 小时前
24. 什么是不可变对象,好处是什么
java·开发语言·面试·学习方法