例如,假设你有一个表示千米到英里转换器的接口:
class Miles:
def __init__(self, distance):
self.distance = distance
class Kilometers:
def __init__(self, distance):
self.distance = distance
def to_miles(self):
return self.distance / 1.6
现在需要编写一个使用千米而不是英里测量距离的应用程序。
我们可以创建一个适配器类,将千米转换器转换成英里转换器:
class MilesAdapter:
def __init__(self, kilometers):
self.kilometers = kilometers
def to_miles(self):
return self.kilometers.to_miles()
kilometers = Kilometers(50) # 创建一个千米转换器
# 使用适配器将千米转换器转换成英里转换器
miles = MilesAdapter(kilometers)
print(miles.to_miles()) # 输出 31.25
适配器类 MilesAdapter 接受一个千米转换器作为参数,并实现了英里转换器接口。当我们调用 MilesAdapter 实例上的 to_miles 方法时,它会将距离从千米转换为英里,并委托给千米转换器的 to_miles 方法。
通过使用适配器模式,我们可以使两个不兼容的类之间进行通信,并将它们融合在一起。这样,我们就可以使用既有的代码来解决问题,而无需对其进行重构或修改。
requests模块:requests 是一个用于发送 HTTP 请求的 Python 库,它使用适配器模式来兼容不同的底层传输库(例如 urllib3 或 PySocks)。
unittest模块:unittest 是 Python 内置的单元测试框架,它使用适配器模式来兼容不同的测试运行器(例如 TextTestRunner 或 XmlTestRunner)。
Flask框架:Flask 是一个轻量级 Web 应用程序框架,它使用适配器模式来兼容不同的 WSGI 服务器(例如 Werkzeug 或 gunicorn)。
SQLAlchemy ORM:SQLAlchemy 是一个流行的 Python ORM 库,它使用适配器模式来支持多种不同的 SQL 数据库(例如 PostgreSQL、MySQL 或 SQLite)。
这些框架和模块使用适配器模式的主要目的是将不同的组件或库整合在一起,使它们能够互相兼容。适配器模式的使用可以使代码更加灵活、可扩展和易于维护。