文本是《设计模式(共12篇)》专题的第 8 篇。阅读本文前,建议先阅读前面的文章:
适配器模式详解
1️⃣ 概念
定义: 是将一个类的接口转换成客户期望的另一个接口;使原本不兼容的类可以一起工作。
类型: 结构性
2️⃣ 适用场景
- 已经存在的类,方法和需求不匹配时(方法结果相同或相似)
- 不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品不同厂家造成功能类似而接口不相同情况下的解决方案
3️⃣ 优点
- 能提高类的透明度和复用,现有的类复用但不需要改变
- 目标类和适配器类解耦,提高程序扩展性
- 符合开闭原则
4️⃣ 缺点
- 适配器编写过程中需要全面考虑,可能会增加系统复杂性
- 增加系统代码可读的难度
5️⃣ 适配器模式的扩展
对象适配器
类适配器
它们之间的主要区别就是一个是通过组合来进行操作的,一个是通过继承来进行操作的。
6️⃣ 适配器模式Coding
类适配器模式
① 创建被适配者
class Adaptee:
def adaptee_request(self):
print("被适配者的方法")
② 创建目标适配
class ConcreteTarget(Target):
def request(self):
print("concreteTarget目标方法")
③ 创建接口
from abc import ABC, abstractmethod
class Target(ABC):
@abstractmethod
def request(self):
pass
④ 创建适配方法
class Adapter(Adaptee, Target):
def request(self):
# ...
super().adaptee_request()
# ...
⑤ 创建测试类
def main():
target = ConcreteTarget()
target.request()
adapter_target = Adapter()
adapter_target.request()
if __name__ == "__main__":
main()
对象适配器模式
① 创建被适配者
class Adaptee:
def adaptee_request(self):
print("被适配者的方法")
② 创建接口
from abc import ABC, abstractmethod
class Target(ABC):
@abstractmethod
def request(self):
pass
③ 创建目标适配
class ConcreteTarget(Target):
def request(self):
print("concreteTarget目标方法")
④ 创建Adapter
class Adapter(Target):
def __init__(self):
self.adaptee = Adaptee()
def request(self):
# ...
self.adaptee.adaptee_request()
# ...
⑤ 创建测试类
def main():
target = ConcreteTarget()
target.request()
adapter_target = Adapter()
adapter_target.request()
if __name__ == "__main__":
main()
7️⃣ 适配器模式实际应用
在Python标准库中的应用:各种文件格式转换器、数据库适配器等
您已阅读完《设计模式(共12篇)》专题的第 8 篇。请继续阅读该专题下面的文章:
