Адаптер - это паттерн, который позволяет несовместимым интерфейсам работать вместе. Он действует как переходник между двумя объектами преобразуя интерфейс одного в интерфейс другого, ожидаемый классом.
Стоит использовать когда нужно интегрировать старый код в новый не ломая логику, когда нужно использовать сторонний класс, или когда нужно унифицировать работу с API, имеющим схожий функционал, но разные методы.
Есть два типа адаптеров: Адаптер класса - использует множественное наследование: `class OldSystem: def execute_old(self, command): return f"Выполнено: {command}"
class NewSystemInterface: def run(self, instruction): pass
#Адаптер наследует OldSystem и реализует NewSystemInterfaceclass 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 в NewPrinterInterfaceclass 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.