Adapter (Адаптер) относиться к классу структурных паттернов. Он используется для преобразования одного интерфейса в другой, необходимый клиенту. Адаптер обеспечивает совместимость несовместимых интерфейсов, реализуя прослойку.
Принцип работы
Адаптер наследует открытым способом целевой интерфейс (назовем его Target), и закрытым способом адаптируемый интерфейс (Adaptee). В реализации методов целевого интерфейса происходит перенаправление (делегирование) запросов классу с адаптируемым интерфейсом
Пример
[php]
<?php
// Целевой интерфейс, клиент умеет работать только с ним
interface iTarget
{
public function query();
}
// Адаптируемый интерфейс. Клиент с ним не умеет работать, но очень хочет
interface iAdaptee
{
public function request();
}
// Класс, реализующий адаптирумым интерфейс
class Adaptee implements iAdaptee
{
public function request()
{
return __CLASS__ . "::" . __METHOD__;
}
}
class Adapter implements iTarget
{
protected
$adaptee = null;
public function __construct()
{
$this -> adaptee = new Adaptee();
}
public function query()
{
return $this -> adaptee -> request();
}
}
$Target = new Adapter();
print $Target -> query(); // "Adaptee::request"
[/php]
Заключение
Адаптер может адаптировать в единый сразу несколько интерфейсов, такой паттерн называют адаптер объектов
Использование этого паттерна оправдано в нескольких случаях. Если вы хотите использовать существующий класс с иным интерфейсом. Если адаптируемый интерфейс собираетесь использовать в нескольких местах, и не имеете возможности везде привести к единому виду, тогда использование сменных адаптеров может оказаться хорошей идеей.