Шаблоны проектирования 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, который реализует все атрибуты и отображает вывод как видимый.