5、适配器模式
...About 3 min
5、适配器模式
一、定义
适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。它通过引入一个中间件——适配器,将一个类的接口转换成客户期望的另一个接口,从而使原本因接口不兼容而不能一起工作的类能够协同工作。适配器模式的核心思想在于创建一个新的类或对象,作为现有类和目标接口之间的桥梁,使得它们可以相互协作。
在python的pandas是大名鼎鼎的数据处理模块,提供了强大的数据结构如 Series和 DataFrame,同时支持excel,csv等数据格式的相互转换,明确地以“适配器模式”的名义实现其功能,然而,在某些方面,Pandas确实体现了适配器模式的核心思想——即通过某种机制使不同的接口或数据源能够协同工作。
数据类型转换:Pandas可以读取多种不同格式的数据文件(CSV、Excel、SQL数据库等),并将这些数据统一为 DataFrame对象进行处理。
与NumPy的集成:Pandas是基于NumPy构建的,但又扩展了NumPy的功能,允许处理更复杂的数据类型(如字符串、时间序列等)。在这种意义上,Pandas也起到了适配器的作用,因为它让原本只适用于数值数组的NumPy工具能够处理更加多样化和结构化的表格型数据。
二、解决的问题
适配器模式主要解决了以下几种情况下的问题:
- 系统需要使用现有的类,但此类不符合系统的需要。
- 想要建立一个可重复使用的类,用于与一些彼此间没有太多关联的类合作。
- 需要统一输出接口,但是输出类型不可预知。
三、适配器模式结构
- 客户端 (Client) 是包含当前程序业务逻辑的类。
- 客户端接口 (Client Interface) 描述了其他类与客户端代码合作时必须遵循的协议。
- 服务 (Service) 中有一些功能类 (通常来自第三方或遗留系统)。 客户端与其接口不兼容, 因此无法直接调用其功能。
- 适配器 (Adapter) 是一个可以同时与客户端和服务交互的类: 它在实现客户端接口的同时封装了服务对象。 适配器接受客户端通过适配器接口发起的调用, 并将其转换为适用于被封装服务对象的调用。
class Target:
def request(self) -> str:
return "Target: The default target's behavior."
class Adaptee:
def specific_request(self) -> str:
return ".eetpadA eht fo roivaheb laicepS"
class Adapter(Target, Adaptee):
def request(self) -> str:
return f"Adapter: (TRANSLATED) {self.specific_request()[::-1]}"
def client_code(target: "Target") -> None:
print(target.request(), end="")
if __name__ == "__main__":
print("Client: I can work just fine with the Target objects:")
target = Target()
client_code(target)
print("\n")
adaptee = Adaptee()
print("Client: The Adaptee class has a weird interface. "
"See, I don't understand it:")
print(f"Adaptee: {adaptee.specific_request()}", end="\n\n")
print("Client: But I can work with it via the Adapter:")
adapter = Adapter()
client_code(adapter)
四、和其他模式的关系
Powered by Waline v2.15.8