Posted by Merlin on Март 16th, 2010
Декоратор (Decorator) - паттерн проектирования, с помощью которого можно добавить объекту новые обязанности, опции, не изменяя его внутренней структуры. Известен также под названием Обёртка (Wrapper), которое во многом раскрывает его суть. Он оборачивает собой целевой объект и дополняет его основные функции. Это дает возможность расширять объект, добавлением или удалением обрамляющего декоратора без изменения самого объекта.
Для лучшего понимания, что собой представляет шаблон Декоратор, а я бы назвал его русским именем Matryoshka, рассмотри конкретный пример. Допустим нам необходимо расширить класс MyButton для добавления в него отступов (padding), рамки (border) и фона (background), то есть изменить отображение класса, причем добавляться элементы оформления должны как одновременно, так и по отдельности. Конечно можно добавить новые обязанности с помощью наследования, но это породит большое количество классов и будет более статическим решением, что не даст достаточной гибкости в управлении.
Более рациональный и гибкий подходом к данной ситуации: поместить объект класса MyButton , в дальнейшем компонент, в другой объект, который и будет имплементировать интерфейс компонента и добавлять необходимые элементы, он и называется декоратором. Важно понимать что декоратор следует интерфейсу декорируемого объекта, из-за чего он абсолютно прозрачен для клиента, поэтому декораторы могут вкладываться друг в друга, в произвольном порядке. Декоратор переадресует внешние вызовы компоненту, но может выполнять и дополнительные действия до или после переадресации. По этому клиент не может отличить декорированный объект от недекорированного и никоим образом не зависит от наличия или отсутствия оформления.
А теперь давайте рассмотрим пример реализации шаблона на actionscritp 3:

Загрузка ...
Read more »