Назад к вопросам
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(); // Выведет: Адаптируемый запрос
Преимущества
- Повторное использование существующего кода.
- Изоляция клиентского кода от изменений в адаптируемых классах.
- Возможность работы с несколькими несовместимыми классами через единый интерфейс.