Адаптер — это один из структурных паттернов, из названия которого исходит его и назначения. По сути это типичный переходник для разных интерфейсов или данных.
1. Адаптер имеет интерфейс, который совместим с одним из объектов.
2. Поэтому этот объект может свободно вызывать методы адаптера.
3. Адаптер получает эти вызовы и перенаправляет их второму объекту, но уже в том формате и последовательности, которые понятны второму объекту.
Вырожденная форма адаптера — двухсторонний адаптер.
Нефизические примеры из жизни — это например система СМЭВ, которая предоставляет сервисы для получения/ обмена информацией.
Однако для работы вашего приложения со СМЭВ нужны адаптеры на вашей стороне, которые могут воспринимать данные, полученные со стороны СМЭВ, переводя их в объекты, понятные вашей системе.
Существуют адаптеры класса и адаптеры объекта.
пример адаптера на python для круглых отверстий и кольев квадратного сечения
# coding=utf-8 import math class Hole(object): """ Абстрактная дырка в вашем коде """ def __init__(self, r): # задаем радиус дыры self.r = r def put(self, obj): # пытаемся поместить try: # чтобы влезло, нужно, # чтобы радиус дырки позволял if self.r >= obj.r: print u'Лезет!' else: print u'Не лезет' except AttributeError: print (u'Переданный объект не умеет вычислять радиус дырки,' u' в которую он влезет! Напишите Адаптер на python!') class Square(object): """ Абстрактный квадратный кол, который позволит закрыть абстрактную дырку в коде """ def __init__(self, x, h): # зададим параметры дрына self.x = x self.h = h class SquareHoleAdapter(object): def __init__(self, sq_obj): self.sq_obj = sq_obj @property def r(self): # половина диагонали квадрата будет как раз влезать # в дырку радиусом с полученное значение return math.sqrt(2*(self.sq_obj.x**2))/2 h1 = Hole(5) h2 = Hole(2) s1 = Square(5, 7) s2 = Square(3, 3) sa = SquareHoleAdapter(s2) h1.put(s1) >>> Переданный объект не умеет вычислять радиус дырки, в которую он влезет! Напишите Адаптер на python! h1.put(sa) >>> Лезет! h2.put(sa) >>> Не лезет