Сайт вебмастера

Шаблон Decorator (Декоратор)

04-11-2019Время чтения ~ 2 мин.PHP/ООП 6579

Шаблон Decorator используется там, где нужно расширить функциональность существующего класса. Например вы делаете сайт, где используется какой-то компонент (блок, виджет и т.д.). За это отвечает класс компонента. Потом выясняется, что нужно сделать ещё один компонент для другого вывода. Поскольку все компоненты основаны на одном интерфейсе (или абстрактном классе), то проблем нет. И в какой-то момент, вдруг выясняется, что все компоненты должны поддерживать какую-то новую функциональность, например вывод блока оформления до и после самого компонента.

Очевидно, что переписывать все существующие классы не самая лучшая идея, поэтому здесь на помощь и приходит паттерн Декоратор.

Задача сводится к тому, чтобы создать класс, который будет «декорировать» существующие компоненты. В итоге классы компонентов можно дальше развивать, но их использование будет уже через класс-посредник.

Посмотрите исходный код на гитхабе.

Классы расширяющие ComponentAbstract отвечают за компоненты. А класс Decorator представляет собой обёртку над ними. Конкретный экземпляр компонента определяется уже в момент инстанцирования.

Паттерн интересен тем, что позволяет отделить программирование классов компонентов от их использования. При этом сам класс декоратора также может развиваться отдельно. Это хороший пример композиции в ООП.

Похожие записи