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

总结

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

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

相关推荐
鹿角片ljp5 分钟前
KV Cache 解析
java·算法
captain37621 分钟前
网络原理(9)-数据链路层
java·网络协议·java-ee
惊讶的猫1 小时前
意图识别置信度和检索重排的分数
java
2601_966949651 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
caoerzhong1 小时前
仓库管理数字化趋势解读:JeeWMS 开源 Java WMS 视角下的五个演进方向
java·开源
m0_734571761 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
程序员JerrySUN2 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
Joy T3 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
估值探索者3 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN11426760083 小时前
1.3第一个程序的介绍
开发语言·qt