Шаблоны проектирования Python - Адаптер
Шаблон адаптера работает как мост между двумя несовместимыми интерфейсами. Этот тип шаблона проектирования относится к структурному шаблону, поскольку он сочетает в себе возможности двух независимых интерфейсов.
Этот шаблон включает в себя один класс, который отвечает за объединение функций независимых или несовместимых интерфейсов. Примером из реальной жизни может быть кардридер, который действует как адаптер между картой памяти и ноутбуком. Вы вставляете карту памяти в устройство чтения карт и устройство чтения карт в портативный компьютер, чтобы карту памяти можно было прочитать через ноутбук.
Шаблон проектирования адаптера помогает работать классам вместе. Он преобразует интерфейс класса в другой интерфейс в зависимости от требований. Шаблон включает в себя видообразование полиморфизм, который называет одно имя и несколько форм. Скажем, для класса формы, который можно использовать в соответствии с собранными требованиями.
Есть два типа шаблона адаптера -
Шаблон адаптера объекта
Этот шаблон проектирования основан на реализации объекта. Следовательно, он называется шаблоном адаптера объекта.
Шаблон адаптера класса
Это альтернативный способ реализации шаблона проектирования адаптера. Паттерн может быть реализован с использованием множественного наследования.
Как реализовать выкройку адаптера?
Давайте теперь посмотрим, как реализовать шаблон адаптера.
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, который реализует все атрибуты и отображает вывод как видимый.