Java 适配器模式(Adapter Pattern)详解
🔌 什么是适配器模式?
适配器模式用于将一个类的接口转换成客户端所期望的另一种接口,让原本接口不兼容的类可以协同工作。
📦 就像插头转换器,让不同国家的插座和电器匹配。
🧠 使用场景
- 系统中有现成的类,但接口不符合需求
- 想复用老代码,但不想改动它
- 接口适配第三方库或遗留系统
🏗️ 模式结构
- Target(目标接口):客户端期望的接口
- Adaptee(被适配者):已有的接口
- Adapter(适配器):将 Adaptee 转换为 Target
✅ 示例:USB 转 Type-C 适配器
目标接口(TypeC)
java
public interface TypeC {
void chargeWithTypeC();
}
被适配者(老版 USB)
java
public class USBCharger {
public void chargeWithUSB() {
System.out.println("使用 USB 接口充电");
}
}
适配器类(类适配器方式,使用继承)
java
public class USBToTypeCAdapter extends USBCharger implements TypeC {
@Override
public void chargeWithTypeC() {
System.out.println("适配器转换 Type-C -> USB");
chargeWithUSB(); // 实际还是调用 USB
}
}
客户端调用
java
public class Main {
public static void main(String[] args) {
TypeC charger = new USBToTypeCAdapter();
charger.chargeWithTypeC();
}
}
🔄 另一种方式:对象适配器(使用组合)
java
public class USBToTypeCObjectAdapter implements TypeC {
private USBCharger usbCharger;
public USBToTypeCObjectAdapter(USBCharger usbCharger) {
this.usbCharger = usbCharger;
}
@Override
public void chargeWithTypeC() {
System.out.println("对象适配器:Type-C -> USB");
usbCharger.chargeWithUSB();
}
}
🧩 优点
- 解耦客户端与具体实现类
- 提高复用性(复用旧类)
- 灵活性强:支持类适配或对象适配
⚠️ 缺点
- 增加系统复杂性
- 过多使用会导致系统中充斥着适配器,降低可读性
✅ 使用建议
适配器模式适用于以下场景:
- 接口不兼容但需复用旧类
- 调整不同模块或库之间的协作接口
- 系统升级过渡阶段,保留旧逻辑的同时支持新接口