结构型——适配器模式
适配器模式
适配器模式是一种用于解决两个不兼容接口之间协同工作问题的结构型设计模式,其核心思想是通过建立一个中间层(适配器)将现有的接口转换为客户端期望的接口
特点
- 兼容性:适配器模式将不兼容的接口转换为兼容的接口,从而实现两个不兼容的类协同工作。
- 透明性:客户端调用适配器时无需感知接口转换的过程,保持调用逻辑简洁。
- 复用性:适配器模式可以复用已有的接口,从而实现对现有接口的扩展和复用。
模式结构
- 目标接口:定义客户端所期待的接口,即客户端所期望的接口。
- 适配接口:已有的类或者第三方接口,即需要适配的接口。
- 适配器:实现目标接口,包装适配接口。
简单示例
# 目标接口
class TypeCCharger:
def charge(self):
print("Charging with Type C")
# 适配接口
class MicroUSBCharger:
def old_charge(self):
print("Charging with Micro USB")
# 适配器
class TypeCAdapter(TypeCCharger):
def __init__(self, micro_usb_charger):
self.micro_usb_charger = micro_usb_charger
def charge(self):
print("Adapting Micro USB to Type C")
return self.micro_usb_charger.old_charge()
# 客户端代码
if __name__ == "__main__":
type_c_charger = TypeCCharger()
type_c_charger.charge()
micro_usb_charger = MicroUSBCharger()
type_c_adapter = TypeCAdapter(micro_usb_charger)
type_c_adapter.charge()
示例类图:
其实适配器一般来说有俩种,上述的是对象适配器,还有一种是类适配器。类适配器需要编程语言支持多继承,但是python的多继承会发生菱形继承问题,所以python不支持类适配器。
适用场景
- 新旧接口不兼容
- 使用第三方库,统一接口规范
- 为多个不同接口统一访问入口
优缺点
-
优点:
- 提高代码的复用性,兼容旧系统
- 符合开闭原则
- 解耦了客户端与被适配接口
-
缺点:
- 适配器类数量过多,增加系统复杂度