📜  Python设计模式-适配器

📅  最后修改于: 2020-11-07 09:06:30             🧑  作者: Mango


适配器模式充当两个不兼容接口之间的桥梁。这种设计模式属于结构模式,因为该模式结合了两个独立接口的功能。

此模式涉及单个类,该类负责加入独立或不兼容接口的功能。现实生活中的例子可能是读卡器,它充当存储卡和笔记本电脑之间的适配器。您将存储卡插入读卡器,将读卡器插入便携式计算机,以便可以通过便携式计算机读取存储卡。

适配器设计模式有助于将类一起工作。它将根据需要将类的接口转换为另一个接口。该模式包括一个物种多态性,该多态性命名一个名称和多种形式。说一个可以根据收集的要求使用的形状类别。

适配器模式有两种类型-

对象适配器模式

此设计模式依赖于对象实现。因此,它称为对象适配器模式。

类适配器模式

这是实现适配器设计模式的另一种方法。可以使用多个继承来实现该模式。

如何实现适配器模式?

现在让我们看看如何实现适配器模式。

class EuropeanSocketInterface:
   def voltage(self): pass

   def live(self): pass
   def neutral(self): pass
   def earth(self): pass

# Adaptee
class Socket(EuropeanSocketInterface):
   def voltage(self):
      return 230

    def live(self):
      return 1
   
   def neutral(self):
      return -1
   
   def earth(self):
      return 0

# Target interface
class USASocketInterface:
   def voltage(self): pass
   def live(self): pass
   def neutral(self): pass

# The Adapter
class Adapter(USASocketInterface):
   __socket = None
   def __init__(self, socket):
      self.__socket = socket
   
   def voltage(self):
      return 110
   
   def live(self):
      return self.__socket.live()
   
   def neutral(self):
      return self.__socket.neutral()

# Client
class ElectricKettle:
   __power = None
   
   def __init__(self, power):
       self.__power = power
   
   def boil(self):
      if self.__power.voltage() > 110:
         print "Kettle on fire!"
      else:
         if self.__power.live() == 1 and \
            self.__power.neutral() == -1:
            print "Coffee time!"
         else:
            print "No power."

def main():
   # Plug in
   socket = Socket()
   adapter = Adapter(socket)
   kettle = ElectricKettle(adapter)
    
   # Make coffee
   kettle.boil()
    
   return 0
    
if __name__ == "__main__":
   main()

输出

上面的程序生成以下输出-

适配器图案

说明

该代码包括具有各种参数和属性的适配器接口。它包括Adaptee和实现所有属性并将目标输出显示为可见的Target接口。