前言
GOF设计模式分三大类:
- 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。
- 结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
- 行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
一、适配器模式
适配器模式(Adapter Pattern)
-
定义:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。
-
解决问题:如何在不修改现有系统的前提下重用没有源码的第三方类库?
-
使用场景:
- 适配器模式通常用于现有系统与第三方产品功能的集成,采用增加适配器的方式将第三方类集成到系统中。
- 当你希望使用一个已经存在的类,但其接口(例如方法名)不符合你的需求时。
- 当你想要创建一个可重用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
- 当你需要使用多个现有的子类,但又不想派生所有这些子类的适配器时,可以采用对象适配器,从而可以复用现有的子类。
-
组成:
- 目标(Target)接口/类:当前系统期望使用的接口,它定义了客户希望使用的方法。
- 适配器(Adapter)类:一个中介类,它实现了目标接口,并通过私有方式包含一个被适配者的实例,从而将目标接口和被适配者接口匹配起来。
- (被)适配者(Adaptee)类:一个现存的需要适配的类,它包含一些功能,但是不符合目标接口。
-
优点:
- 将目标类和适配者类解耦。通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
- 增加了类的透明性和复用性。将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者类的复用性,同一个适配者类可以在多个不同的系统中复用。
二、适配器模式实现
实现方法一:对象适配器模式
-
在对象适配器模式(使用频率更高)中,适配器与适配者之间是关联关系。
-
对象适配器模式结构图
对象适配器模式示例
使用适配器模式来重用算法库中的QuickSort和BinarySearch算法
# 模块adapters.py
"""目标"""
class ScoreOperation:
"""抽象成绩操作类:目标接口"""
def sort(self, scores: list[int]) -> list[int]:
raise NotImplementedError
def search(self, scores: list[int</