java设计模式之适配器模式

适配器模式是一种结构型设计模式,用于将不兼容的接口转换为客户端期望的接口,使原本因接口不匹配而无法协同工作的类能够一起工作。类似于电源适配器将220V电压转换为5V供手机充电。

结构

1.角色划分:

目标接口(Target) :客户端期望调用的接口。

被适配者(Adaptee) :已存在的、需要被适配的类(接口不兼容)。

适配器(Adapter):通过继承或组合方式,将Adaptee转换为Target接口。

2. 实现方式:

类适配器: 通过继承Adaptee并实现Target接口(需支持多继承,Java中不适用)。

◦ **对象适配器:**通过组合Adaptee对象并实现Target接口(推荐方式)。

实现方式

场景描述:

假设现有旧版文件读取器LegacyFileReader,其接口为readFile(String path),而客户端期望调用统一的文件处理器接口FileProcessor的process(String path)方法。通过适配器将二者对接。

1、对象适配器:

1. 定义目标接口(Target) 2. 实现被适配者(Adaptee) 3. 创建适配器(Adapter)

4. 客户端调用

2、类适配器(伪代码,Java不直接支持)

使用场景

  1. 整合旧系统 :将遗留代码或第三方库接口转换为新系统的接口。

  2. 统一接口规范 :多个类功能相似但接口不同,需统一调用方式。

3.兼容不同版本 :如系统升级时保留旧接口的适配层。

  1. 框架扩展:适配不同数据源(如数据库驱动、文件格式)。

适配器模式 vs. 其他模式

实际应用案例

1、Java I/O流:

◦ InputStreamReader 和 OutputStreamWriter 是适配器,将字节流适配为字符流。

2、集合框架:

◦ Collections.list(Enumeration) 将旧版Enumeration适配为List。

3、Spring MVC:

◦ HandlerAdapter 将不同类型的Controller(如Servlet、POJO)适配为统一的处理接口。

优缺点

优点

解耦客户端与被适配者 :客户端仅依赖目标接口。

复用现有类:无需修改原有代码即可整合功能。

缺点

增加代码复杂度 :过多适配器会降低代码可读性。

可能掩盖设计缺陷:过度使用可能延迟系统重构。

总结

适配器模式是解决接口不兼容问题的利器,尤其在以下场景中效果显著:

• 系统需要集成外部组件或遗留代码。

• 需要统一多个类的接口调用方式。

• 希望在不修改原有代码的前提下扩展功能。

通过合理使用适配器模式,可以提升系统的灵活性和可维护性,降低模块间的耦合度。

相关推荐
工业甲酰苯胺10 小时前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫10 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
@forever@10 小时前
【JAVA】LinkedList与链表
java·python·链表
LilySesy10 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv
六件套是我10 小时前
redission实现延时队列
android·java·servlet
王元_SmallA11 小时前
Redis Desktop Manager(Redis可视化工具)安装
java·后端
ᐇ95911 小时前
Java HashMap深度解析:数据结构、原理与实战指南
java·开发语言·数据结构
好好研究11 小时前
Spring框架 - 开发方式
java·后端·spring
武子康11 小时前
Java-166 Neo4j 安装与最小闭环 | 10 分钟跑通 + 远程访问 Docker neo4j.conf
java·数据库·sql·docker·系统架构·nosql·neo4j
2301_7965125212 小时前
Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
java·学习·rust