
from abc import ABC, abstractmethod
# Target
class IText(ABC):
@abstractmethod
def get_text(self) -> str:
# Request()
pass
# Adaptee
class StringList:
def __init__(self):
self.rows: list[str] = []
def add(self, value: str) -> None:
self.rows.append(value)
def get_string(self) -> str:
# SpecificRequest()
return "\n".join(self.rows)
# Adapter
class TextAdapter(StringList, IText):
def get_text(self) -> str:
# Request() delegates to SpecificRequest()
return self.get_string()
# Client
adapter = TextAdapter()
adapter.add("line 1")
adapter.add("line 2")
print(adapter.get_text())
# Output: line 1
# line 2
| Преобразует интерфейс класса в другой интерфейс, ожидаемый клиентами. Обеспечивает совместную работу классов, которая была бы невозможна без данного паттерна из-за несовместимости интерфейсов. |