适配器模式

模式描述

将一个类的接口转换为客户希望的另外一个接口。

优点

缺点

应用场景

  1. 封装有缺陷的接口设计;
  2. 统一多个类的接口设计;
  3. 替换依赖的外部系统;
  4. 兼容老版本接口;
  5. 适配不同格式的数据;
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 类

客户端。

数据流

  1. Client 在 Adapter 实例上调用一些操作;
  2. Adaptee 来实现 Adapter 的操作;

相关模式

  • 桥接模式:桥接模式的出发点是将接口和实现分离,使两者可以独立地改变;而适配器模式需要改变一个已有对象的接口;
  • 装饰器模式:装饰器模式在不改变接口的前提下,增强功能,它对应用程序的透明性比适配器好;
  • 代理模式:代理模式不改变原有接口。主要目的是控制访问,而非加强功能;

补充

  • 如果 Adaptee 接口并不多,组合和继承都可以选择;
  • 如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分都相同,继承适配器的代码量少,推荐使用;
  • 如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分都不相同,组合适配器更加灵活;
  • 适配器模式是”补偿“模式,用来补救设计上的缺陷;

示例代码

golang

java