适配器模式(Adapter Pattern)
定义
适配器模式是一种结构型设计模式,用于解决两个不兼容接口之间的兼容性问题。它通过包装对象的方式,将已有接口转换为客户端期望的接口,类似电源适配器的功能。
UML 类图
核心角色
- Target:目标接口,定义客户端期望的接口(如 request())。
- Adaptee:被适配者,包含需要被适配的已有功能(如 specificRequest())。
- Adapter:适配器,将 Adaptee 的接口转换为 Target 接口。
- Client:客户端,通过 Target 接口调用功能,无需感知适配过程。
优点
- 兼容性:解决新旧接口不兼容问题,保护已有代码。
- 解耦性:客户端与具体实现解耦,仅依赖目标接口。
- 复用性:复用已有类或第三方库的功能,无需修改其源码。
- 灵活性:支持同时适配多个对象或接口(如组合多个适配器)。
缺点
- 过度包装:过多使用适配器会增大系统复杂度,降低可读性。
- 性能损耗:多层适配器调用可能增加额外开销。
- 设计妥协:可能掩盖接口设计不合理的问题(应优先优化接口设计)。
适用场景
旧系统整合
- 将遗留代码的接口适配到新系统(如老版支付接口适配到新平台)。
- 第三方库的功能适配(如不同地图 SDK 的坐标转换)。
接口标准化
- 统一多个类的接口(如不同品牌打印机的驱动适配)。
- 微服务中不同协议转换(如 gRPC 接口适配为 RESTful API)。
## 系统扩展 - 为对象添加额外功能(类似装饰器模式,但侧重接口转换)。
- 兼容多个版本的数据格式(如 XML 转 JSON 适配器)。
# 代码示例(Java)
对象适配器(组合方式)
类适配器(继承方式)
两种适配器对比
总结:适配器模式是解决接口不兼容问题的利器,尤其适用于整合遗留代码或第三方库,但需注意避免过度设计。优先选择对象适配器(组合方式),在单继承语言中更灵活。