Назад к вопросам
Middle
112
questionbank

Какую проблему решает паттерн адаптер?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Позволяет объектам с несовместимыми интерфейсами работать совместно.

Принцип работы

  • Создается класс-адаптер, реализующий целевой интерфейс.
  • Внутри адаптера содержится экземпляр существующего («адаптируемого») класса.
  • Методы целевого интерфейса в адаптере вызываются, преобразуя вызовы к соответствующим методам адаптируемого класса.

Пример использования

Работа с библиотеками, имеющими разные соглашения об именовании методов или структуре данных.

// Целевой интерфейс, который мы хотим использовать
interface TargetInterface
{
    public function request();
}

// Существующий класс с несовместимым интерфейсом
class Adaptee
{
    public function SpecificRequest()
    {
        return "Адаптируемый запрос";
    }
}

// Класс-адаптер
class Adapter implements TargetInterface
{
    private $adaptee;

    public function __construct(Adaptee $adaptee)
    {
        $this->adaptee = $adaptee;
    }

    public function request()
    {
        // Преобразование вызова
        return $this->adaptee->SpecificRequest();
    }
}

// Использование
$adaptee = new Adaptee();
$adapter = new Adapter($adaptee);

echo $adapter->request(); // Выведет: Адаптируемый запрос

Преимущества

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