03.10 2010

Adapter

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Adapter (Адаптер) относиться к классу структурных паттернов. Он используется для преобразования одного интерфейса в другой, необходимый клиенту. Адаптер обеспечивает совместимость несовместимых интерфейсов, реализуя прослойку.

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

Адаптер наследует открытым способом целевой интерфейс (назовем его Target), и закрытым способом адаптируемый интерфейс (Adaptee). В реализации методов целевого интерфейса происходит перенаправление (делегирование) запросов классу с адаптируемым интерфейсом

Пример

// Целевой интерфейс, клиент умеет работать только с ним
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"

скчать код примера

Заключение

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

comments powered by Disqus