← Назад ко всем вопросам

Паттерн: Адаптер (Adapter)

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

Паттерн "Адаптер" — это один из структурных паттернов проектирования, который решает проблему несовместимости интерфейсов. Представьте, что у вас есть два устройства с разными разъемами, и вам нужно их соединить. Адаптер в этом случае будет как переходник, который позволяет подключить одно устройство к другому, несмотря на различия в разъемах.

Зачем нужен паттерн "Адаптер"?

В реальной жизни часто бывает, что у нас есть существующий код или библиотека, которую мы не можем изменить, но нам нужно, чтобы она работала с новым кодом. Паттерн "Адаптер" позволяет интегрировать такие несовместимые части без изменения их внутренней логики.

Где применяется?

  • Интеграция старого и нового кода: Когда нужно использовать старую библиотеку в новом проекте.
  • Работа с внешними API: Когда API изменяется, и нужно адаптировать старый код к новому интерфейсу.
  • Унификация интерфейсов: Когда нужно, чтобы разные классы имели одинаковый интерфейс для использования в одном контексте.

Как работает паттерн "Адаптер"?

Адаптер оборачивает объект с несовместимым интерфейсом и предоставляет интерфейс, который ожидает клиент. Это позволяет клиенту работать с адаптированным объектом так, как будто он использует объект с совместимым интерфейсом.

Пример на Python

Представим, что у нас есть класс OldPrinter, который имеет метод print_text(), и новый интерфейс NewPrinterInterface, который ожидает метод print().

class OldPrinter:
    def print_text(self, text):
        print(f"Old Printer: {text}")
​
class NewPrinterInterface:
    def print(self, text):
        pass
​
class PrinterAdapter(NewPrinterInterface):
    def __init__(self, old_printer):
        self.old_printer = old_printer
​
    def print(self, text):
        self.old_printer.print_text(text)
​
# Использование
old_printer = OldPrinter()
adapter = PrinterAdapter(old_printer)
adapter.print("Hello, World!")

В этом примере PrinterAdapter оборачивает OldPrinter и предоставляет метод print(), который вызывает print_text() у OldPrinter. Таким образом, OldPrinter может использоваться в контексте, где ожидается NewPrinterInterface.

Аналогия

Представьте, что у вас есть старый телевизор с аналоговым входом и новая игровая консоль с HDMI-выходом. Чтобы подключить их друг к другу, вам нужен HDMI-адаптер, который преобразует цифровой сигнал в аналоговый. Паттерн "Адаптер" выполняет аналогичную функцию в программировании, позволяя двум несовместимым системам работать вместе.

Тема: ООП
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки