Заметки WEB-разработчика

Полезные материалы для web-разработки

Паттерн декоратор (Wrapper)

В этой статье вы найдете самое простое объяснение паттерна декоратор (Wrapper).

Описание метафорой

Как понятно из названия, данный паттерн чаще всего используется для расширения исходного объекта до требуемого вида. Например мы условно можем считать «декоратором» человека с кистью и красной краской. Таким образом, какой бы объект (или определенный тип объектов) мы не передали в руки «декоратору», на выходе мы будем получать красные объекты.

Обычное описание

Decorator (Декоратор) относиться к классу структурных паттернов. Он используется для динамического расширения функциональности объекта. Является гибкой альтернативой наследованию.

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

interface IComponent
{
    public function operation();
}

class Component implements IComponent
{
    public function operation() {
        return 'I`m component';
    }
}

abstract class Decorator implements IComponent
{
    protected $_component;

    public function __construct(IComponent $component){
        $this->_component = $component;
    }
}

class GreenDecorator extends Decorator
{
    public function operation(){
        return '<p style="color:green">' . $this->_component->operation() . '</p>';
    }
}

class RedDecorator extends Decorator
{
    public function operation(){
        return '<p style="color:red">' . $this->_component->operation() . '</p>';
    }
}

$component = new Component();
$decorator = new GreenDecorator($component);
//$decorator = new RedDecorator($component);
echo $decorator->operation();

Комментарии

Комментарии через Вконтакте