Java设计模式之适配器模式详解
·
Java设计模式之适配器模式详解
一、适配器模式核心思想
核心目标:将不兼容的接口转换为客户端期望的接口,解决类之间因接口不匹配而无法协作的问题。如同现实中的电源适配器,让不同规格的插头兼容插座。
二、适配器模式类图(Mermaid)
1. 对象适配器(推荐方式)
2. 类适配器(需多重继承,Java通过接口实现)
三、两种适配器对比
| 类型 | 实现方式 | 优点 | 缺点 |
|---|---|---|---|
| 对象适配器 | 组合被适配对象 | 灵活,可适配多个类 | 需维护适配器与目标的关系 |
| 类适配器 | 继承被适配类(或接口) | 代码简洁 | 受限于Java单继承 |
四、代码实现示例
1. 对象适配器(组合实现)
// 被适配者:第三方SDK的旧接口
class LegacyPrinter {
public void printDocument(String text) {
System.out.println("Legacy Printer: " + text);
}
}
// 目标接口:新系统定义的规范
interface Printer {
void print(String content);
}
// 适配器
class PrinterAdapter implements Printer {
private LegacyPrinter legacyPrinter;
public PrinterAdapter(LegacyPrinter legacyPrinter) {
this.legacyPrinter = legacyPrinter;
}
@Override
public void print(String content) {
legacyPrinter.printDocument(content); // 转换调用方式
}
}
// 客户端调用
Printer printer = new PrinterAdapter(new LegacyPrinter());
printer.print("Hello Adapter"); // 输出:Legacy Printer: Hello Adapter
2. 类适配器(接口继承实现)
// 被适配接口
interface OldService {
void executeOld();
}
// 目标接口
interface NewService {
void executeNew();
}
// 适配器(同时实现新旧接口)
class ServiceAdapter implements NewService, OldService {
public void executeOld() {
System.out.println("Old service logic");
}
public void executeNew() {
executeOld(); // 将旧接口逻辑适配到新接口
System.out.println("Added new logic");
}
}
// 客户端调用
NewService service = new ServiceAdapter();
service.executeNew();
// 输出:
// Old service logic
// Added new logic
五、模式优缺点分析
✅ 优势
- 解耦代码:客户端与具体实现分离
- 复用旧代码:无需修改已有类即可整合
- 灵活扩展:可同时适配多个不同接口
❌ 缺点
- 过度使用增加复杂度:可能引入过多适配器类
- 性能损耗:多一层调用转发
六、典型应用场景
- 旧系统升级:将遗留代码适配到新接口规范
- 第三方库整合:统一不同SDK的接口调用方式
- 接口版本兼容:支持新旧API版本共存
- 设备驱动开发:统一不同硬件的操作接口
七、Mermaid序列图(对象适配器流程)
八、适配器模式 vs 其他模式
| 模式 | 核心区别 |
|---|---|
| 装饰器模式 | 增强现有功能,接口相同 |
| 代理模式 | 控制访问,不改变接口 |
| 外观模式 | 简化复杂子系统的统一入口 |
适配器模式是系统演进过程中的“粘合剂”,合理运用可显著提升代码的兼容性和可维护性。掌握其实现技巧,让新旧组件无缝协作!
如果文章对你有帮助,请帮忙点个关注吧!谢谢啦!
更多推荐
所有评论(0)