适配器模式
模式描述
将一个类的接口转换为客户希望的另外一个接口。
优点
缺点
应用场景
- 封装有缺陷的接口设计;
- 统一多个类的接口设计;
- 替换依赖的外部系统;
- 兼容老版本接口;
- 适配不同格式的数据;
DATE | CHANGELOG |
---|---|
2023年5月6日 | 初始化 |
UML 类图
---
title: 继承实现
---
classDiagram
class Target {
request()
}
class Adaptee {
specificReqest()
}
class Adapter {
request()
}
Target <|.. Adapter
Adaptee <|-- Adapter
Target <-- Client
---
title: 组合实现
---
classDiagram
class Target {
request()
}
class Adaptee {
specificReqest()
}
class Adapter {
request()
}
Target <|.. Adapter
Adaptee o-- Adapter
Target <-- Client
参与者
Target
- 定义 Client 使用的接口;
Adaptee
- 已经存在的接口;
Adapter
- 将 Adaptee 适配到 Target 的接口;
Client 类
客户端。
数据流
- Client 在 Adapter 实例上调用一些操作;
- Adaptee 来实现 Adapter 的操作;
相关模式
- 桥接模式:桥接模式的出发点是将接口和实现分离,使两者可以独立地改变;而适配器模式需要改变一个已有对象的接口;
- 装饰器模式:装饰器模式在不改变接口的前提下,增强功能,它对应用程序的透明性比适配器好;
- 代理模式:代理模式不改变原有接口。主要目的是控制访问,而非加强功能;
补充
- 如果 Adaptee 接口并不多,组合和继承都可以选择;
- 如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分都相同,继承适配器的代码量少,推荐使用;
- 如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分都不相同,组合适配器更加灵活;
- 适配器模式是”补偿“模式,用来补救设计上的缺陷;