适配器模式(Adapter Pattern)是一种结构型设计模式,它将一个类的接口转换成客户端所期望的另一种接口,从而让原本接口不兼容的类可以一起工作。
适配器模式通常用于以下场景:
系统需要使用一个已经存在的类,而这个类的接口不符合系统的需求。
对象适配器模式中,想要使用一些已经存在的子类,但是不可能对每一个子类都进行修改以适应新的接口,适配器模式可以通过适配器类的编写,将所有的子类都适配到新的接口上。
需要在多个类之间共享一些公共功能,但是由于接口不兼容,需要进行适配。
例如,如果一个系统需要使用一个外部API,但是这个API的接口与系统的需要不一致,就可以使用适配器模式将API的接口适配到系统需要的接口上。又比如,如果一个系统需要在不同的数据库之间切换,但是每个数据库都有自己独特的API,这个系统可以通过一个适配器类将所有的数据库API适配到一个通用的API上,这样就可以避免修改系统的核心代码。
下面是一个适配器模式的示例代码:
class Target:
"""
客户端所期望的接口
"""
def request(self):
return"Target: 请求已发送"
class Adaptee:
"""
需要适配的接口
"""
def specific_request(self):
return"Adaptee: 请求已发送"
class Adapter(Target):
"""
适配器,将Adaptee转换成Target接口
"""def __init__(self, adaptee: Adaptee):
self.adaptee = adaptee
def request(self):
return f"Adapter: {self.adaptee.specific_request()}"
def client_code(target: Target) -> None:
"""
客户端代码,接受Target接口的参数
"""
print(target.request())
if __name__ == "__main__":
adaptee = Adaptee()
adapter = Adapter(adaptee)
client_code(adapter)
上面的代码中,我们有一个客户端所期望的接口 Target,和一个需要适配的接口 Adaptee。Adapter 是适配器类,将 Adaptee 类转换成 Target 类。在适配器中,我们使用了 adaptee 参数,这个参数是从 Adaptee 对象传递进来的。最后,我们使用 client_code 函数来测试适配器是否能够将 Adaptee 转换成了 Target 接口。
运行这段代码,将会输出如下结果:
Adapter: Adaptee: 请求已发送
可以看到,Adapter 类将 Adaptee 对象的 specific_request 方法转换成了 Target 类的 request 方法,从而实现了接口的适配。