Паттерны / Структурные паттерны
image

from abc import ABCabstractmethod


# Target
class IText(ABC):
    # Request()
    @abstractmethod
    def get_text(self):
        pass;


# Adaptee
class StringList:
    def __init__(self):
        self.rows = []

    # SpecificRequest()
    def get_string(self):
        return "\n".join(self.rows)

    def add(self, value):
        self.rows.append(value)


# Adapter
class TextAdapter(IText):
    def __init__(self):
        self.stringList = StringList()

    # Request()
    def get_text(self):
        return self.stringList.get_string()


# Client
adapter = TextAdapter()
adapter.stringList.add("line 1")
adapter.stringList.add("line 2")
text = adapter.get_text()
# text: line 1
#       line 2

print(text)


Преобразует интерфейс класса в другой интерфейс, ожидаемый клиентами. Обеспечивает совместную работу классов, которая была бы невозможна без данного паттерна из-за несовместимости интерфейсов.