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