Internet и CGI

       колекция парфюмерной воды celluloid heroes от бренда SALLE PRIVEE в москве

Применяем Decorator


Программы желательно писать так, чтобы не повторять один и тот же код, а повторно его использовать. И потом можно будет менять код в одном месте, а не во многих, как чаще всего происходит. Предлагаю применять шаблон Decorator. Диаграмма классов изображена на рис.7.

Рис.7

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

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

Рис.8

Сначала объясню, что делает каждый декоратор. Border - просто рисует обрамление вокруг любого элемента. WindowHead - рисует подобие заголовка как у всех приложений Windows с кнопочками свернуть и закрыть. NewsHead - рисует серенькое поле, а в нем пишет название новости. NewsBody - рисует саму новость. Другими словами, заходите на сайт, а там новости оформлены в виде Windows окошек. Некоторые новостные сайты такое практикуют. А теперь вернемся к рис.8. Как видно b1 обрамляет wh1, wh1 содержит b2, b2 обрамляет nh, nh содержит b3, а b3 обрамляет nb. Как работает весь этот механизм изображено на рис.9.

Рис.9

Приведу пример кода: Border b1= new Border( new WindowsHead( new Border ( new NewsHead ( new Border ( new NewsBody() ) ) ) )); b1.doPost(...);



Содержание раздела