Где и когда использовать паттерн «Декоратор» Java

Где и когда использовать паттерн "Декоратор" JavaПаттерн «Декоратор» Java динамически добавляет объекту поведение во время выпол­нения или тогда, когда невозможно или нецелесообразно создавать производные классы (возможно, потому, что при этом создаются множественные подклассы).

Пример с пиццерией показывает, как добавить поведение к объекту пиццы во вре­мя выполнения на основе сделанного посетителем выбора.

Функциональность интерфейса программирования приложений (API) может быть расширена и усовершенствована посредством оборачивания в декоратор. Подобным образом часто декорируются потоки данных. java.iо.BufferedInputStream — хороший пример декоратора, оборачивающего низкоуровневое API и добавля­ющего функциональность буферу потока ввода.

В платформе Java ЕЕ декораторы реализованы с помощью контекста и вне­дрения зависимостей (CDI). Вы можете использовать декораторы для добавле­ния нового бизнес поведения или любой другой функциональности, которая может быть обернута вокруг исходного объекта. Однако подобный проект дол­жен быть хорошо документирован и четко реализован ради удобства сопрово­ждения.

Подключаемость декораторов путем описания в дескрипторе развертывания облегчает активизацию/отключение декораторов без пере-компиляции и повтор­ного развертывания. В среде, где требуется «горячее» развертывание, нет необхо­димости перезагружать сервер для вступления в силу изменений в bean.xml. Это делает исключительно легким изменение поведения приложения в условиях экс­плуатации, без остановки на обслуживание.

Использование квалификаторов в большей степени обеспечивает пошаговый контроль за выполнением декораторов, чем их активизация/отключение в деск­рипторе развертывания bean.xml. Вы можете применять квалификаторы для недо­пущения декорирования отдельных реализаций интерфейса или для добавления различных декораторов к реализациям одного интерфейса.

Кстати, вы создаете сайты на WordPress и Joomla? Мы можем посоветовать качественный проект где сможете скачать шаблоны joomla без скрытого кода и ссылок. Все студии собраны в одном месте, торопитесь!

Декоратор перехватывает обращения только к определенным типам языка jаvа. Он «знает» обо всей семантике данного интерфейса и может реализовывать бизнес­ логику. Это делает его идеальным для моделирования бизнес-функциональности,отождествляемой с определенным типом интерфейса.

Декораторы часто противопоставляют перехватчикам. Вторые перехватывают вызовы любого типа языка Java, но «не осведомлены» о семантике и поэтому не подходят для моделирования бизнес-функциональности. Перехватчики использу­ются для реализации не связанной с бизнес логикой сквозной функциональности, такой как журналирование, безопасность и аудит.

Интенсивное использование декораторов может привести к ошибкам време­ни выполнения, более сложному для понимания коду и потере преимущества строго типизированного статического полиморфизма.

Оно также может потре­бовать дополнительных контрольных примеров. Тем не менее декораторы могут обеспечить практически неограниченные возможности масштабирования приложения и отличный интерфейс для будущих реализаций без нарушения старого кода.