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

总结

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

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

相关推荐
码农飞哥2 分钟前
互联网大厂Java面试实战:Spring Boot到微服务的技术问答解析
java·数据库·spring boot·缓存·微服务·消息队列·面试技巧
liudongyang1234 分钟前
jenkins 启动报错
java·运维·jenkins
FY_201810 分钟前
键盘输出希腊字符方法
开发语言
西西弗Sisyphus11 分钟前
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
开发语言·python
曹牧11 分钟前
JSON 实体属性映射的最佳实践
java
qq_5432485222 分钟前
Tomcat服务部署
java·tomcat
Auc2439 分钟前
OJ判题系统第4期之判题机模块架构——设计思路、实现步骤、代码实现(工厂模式、代理模式的实践)
java·spring cloud·log4j·mybatis·代理模式·工厂模式
熊大如如42 分钟前
Java NIO 文件处理接口
java·linux·nio
q567315231 小时前
Go语言多线程爬虫与代理IP反爬
开发语言·爬虫·tcp/ip·golang
Chandler241 小时前
Go语言即时通讯系统 开发日志day1
开发语言·后端·golang