Python Design Patterns 简明教程
Python Design Patterns - Adapter
适配器模式充当两个不兼容接口之间的桥梁。此类设计模式属于结构模式,因为此模式结合了两个独立接口的功能。
该模式涉及单个类,该类负责合并独立或不兼容接口的功能。真实生活中的一个例子是读卡器,它充当存储卡和笔记本电脑之间的适配器。你将存储卡插入读卡器,再将读卡器插入笔记本电脑,这样就可以通过笔记本电脑读取存储卡了。
适配器设计模式有助于让类协同工作。它将类的接口转换为基于需求的另一个接口。该模式包含一项命名为一个名称和多个形式的多态性规范。例如用于形状的类,它可以根据收集到的需求使用。
有两种类型的适配器模式−
How to implement the adapter pattern?
让我们现在看看如何实现适配器模式。
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()