Skip to main content

5、适配器模式

Y-aong...About 3 minpython适配器模式设计模式

5、适配器模式

一、定义

适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。它通过引入一个中间件——适配器,将一个类的接口转换成客户期望的另一个接口,从而使原本因接口不兼容而不能一起工作的类能够协同工作。适配器模式的核心思想在于创建一个新的类或对象,作为现有类和目标接口之间的桥梁,使得它们可以相互协作。

在python的pandas是大名鼎鼎的数据处理模块,提供了强大的数据结构如 SeriesDataFrame,同时支持excel,csv等数据格式的相互转换,明确地以“适配器模式”的名义实现其功能,然而,在某些方面,Pandas确实体现了适配器模式的核心思想——即通过某种机制使不同的接口或数据源能够协同工作。

数据类型转换:Pandas可以读取多种不同格式的数据文件(CSV、Excel、SQL数据库等),并将这些数据统一为 DataFrame对象进行处理。

与NumPy的集成:Pandas是基于NumPy构建的,但又扩展了NumPy的功能,允许处理更复杂的数据类型(如字符串、时间序列等)。在这种意义上,Pandas也起到了适配器的作用,因为它让原本只适用于数值数组的NumPy工具能够处理更加多样化和结构化的表格型数据。

二、解决的问题

适配器模式主要解决了以下几种情况下的问题:

  • 系统需要使用现有的类,但此类不符合系统的需要。
  • 想要建立一个可重复使用的类,用于与一些彼此间没有太多关联的类合作。
  • 需要统一输出接口,但是输出类型不可预知。

三、适配器模式结构

  1. 客户端 (Client) 是包含当前程序业务逻辑的类。
  2. 客户端接口 (Client Interface) 描述了其他类与客户端代码合作时必须遵循的协议。
  3. 服务 (Service) 中有一些功能类 (通常来自第三方或遗留系统)。 客户端与其接口不兼容, 因此无法直接调用其功能。
  4. 适配器 (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)

四、和其他模式的关系

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8