📜  Python设计模式-适配器(1)

📅  最后修改于: 2023-12-03 15:34:32.545000             🧑  作者: Mango

Python设计模式-适配器

适配器是一种常用的设计模式,它允许我们将一个类的接口转换成另一个类的接口,从而使不兼容的类能够相互合作。Python中也提供了内置的适配器模式,我们可以利用这个特性来解决一些类之间不兼容的问题。

角色

适配器模式涉及到以下几个角色:

  • 目标抽象类(Target):定义客户端要求的接口,也就是客户端所期望的接口。
  • 源类(Adaptee):定义需要适配的接口,也就是被适配者。
  • 适配器类(Adapter):将源类的接口转换成目标抽象类所期望的接口。
代码示例

下面我们通过一个示例来演示适配器模式的应用。

假设我们有一个计算器类(Calculator),它能够进行加、减、乘、除的操作。但我们还有一个现成的数学库(Math),其中也有对应的加、减、乘、除的函数。由于两者接口不同,我们需要一个适配器来将Math库的函数适配到Calculator类中。

class Math:
    def add(self, x, y):
        return x + y

    def subtract(self, x, y):
        return x - y

    def multiply(self, x, y):
        return x * y

    def divide(self, x, y):
        return x / y

class Calculator:
    def add(self, x, y):
        return x + y

    def subtract(self, x, y):
        return x - y

    def multiply(self, x, y):
        return x * y

    def divide(self, x, y):
        return x / y

class MathAdapter(Calculator):
    def __init__(self):
        self.math = Math()

    def add(self, x, y):
        return self.math.add(x, y)

    def subtract(self, x, y):
        return self.math.subtract(x, y)

    def multiply(self, x, y):
        return self.math.multiply(x, y)

    def divide(self, x, y):
        return self.math.divide(x, y)

在上面的代码中,我们创建了一个Math类和一个Calculator类,分别实现了加减乘除四个操作。然后我们创建了一个MathAdapter类,继承Calculator类,并在其中包含了Math类的实例。通过这种方式,我们就可以将Math库的函数适配到Calculator类中。

下面是使用示例:

calculator = Calculator()
print(calculator.add(2, 3))  # 5

math_adapter = MathAdapter()
print(math_adapter.add(2, 3))  # 5

可以看到,我们通过适配器成功地将Math库的函数适配到了Calculator类中,实现了一致的加减乘除操作。这是适配器模式的一个经典应用场景。