Адаптер - это паттерн, который позволяет несовместимым интерфейсам работать вместе. Он действует как переходник между двумя объектами преобразуя интерфейс одного в интерфейс другого, ожидаемый классом.

Стоит использовать когда нужно интегрировать старый код в новый не ломая логику, когда нужно использовать сторонний класс, или когда нужно унифицировать работу с API, имеющим схожий функционал, но разные методы.

Есть два типа адаптеров: Адаптер класса - использует множественное наследование: `class OldSystem: def execute_old(self, command): return f"Выполнено: {command}"

class NewSystemInterface: def run(self, instruction): pass

#Адаптер наследует OldSystem и реализует NewSystemInterface

class SystemAdapter(OldSystem, NewSystemInterface): def run(self, instruction): return self.execute_old(instruction) # Адаптация метода

#Использование

adapter = SystemAdapter() print(adapter.run("ls -la")) # Выполнено: ls -la Адаптер объекта - использует композицию: `# Старый класс (несовместимый интерфейс) class OldPrinter: def print_document(self, text): print(f"Печать старого формата: {text}")

#Новый интерфейс, который нам нужен

class NewPrinterInterface: def print(self, content): pass

#Адаптер, преобразующий OldPrinter в NewPrinterInterface

class PrinterAdapter(NewPrinterInterface): def init(self, old_printer): self.old_printer = old_printer # Композиция

def print(self, content): self.old_printer.print_document(content) # Адаптация вызова

#Использование

old_printer = OldPrinter() adapter = PrinterAdapter(old_printer) adapter.print("Hello, World!") # Печать старого формата: Hello, World!

Используется в работе с разными API, при интеграции библиотек, в логировании и в ORM.

#weekofpatterns``