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

总结

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

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

相关推荐
网安INF3 分钟前
RSA加密算法:非对称密码学的基石
java·开发语言·密码学
明月*清风3 分钟前
c++ —— 内存管理
开发语言·c++
蔡蓝8 分钟前
设计模式-观察着模式
java·开发语言·设计模式
异常君21 分钟前
@Bean 在@Configuration 中和普通类中的本质区别
java·spring·面试
jackson凌21 分钟前
【Java学习笔记】Math方法
java·笔记·学习
西北大程序猿1 小时前
单例模式与锁(死锁)
linux·开发语言·c++·单例模式
你不是我我1 小时前
【Java开发日记】说一说 SpringBoot 中 CommandLineRunner
java·开发语言·spring boot
yuan199971 小时前
Spring Boot 启动流程及配置类解析原理
java·spring boot·后端
2301_807606431 小时前
Java——抽象、接口(黑马个人听课笔记)
java·笔记