-
Notifications
You must be signed in to change notification settings - Fork 3
Decorator
Pandas edited this page Jun 18, 2017
·
1 revision
Динамически добавляет объекту новые обязанности. Является гибкой альтернативой порождению подклассов с целью расширения функциональности.
Используйте паттерн декоратор:
- Для динамического, прозрачного для клиентов добавления обязанностей объектам;
- Для реализации обязанностей, которые могут быть сняты с объекта;
- Когда расширение путем порождения подклассов по каким-то причинам неудобно или невозможно. Иногда приходится реализовывать много независимых расширений, так что порождение подклассов для поддержки всех возможных комбинаций приведет к комбинаторному росту их числа. В других случаях определение класса может быть скрыто или почему-либо еще недоступно, так что породить от него подкласс нельзя.
- Component - компонент: определяет интерфейс для объектов, на которые могут быть динамически возложены дополнительные обязанности;
- ConcreteComponent - конкретный компонент: определяет объект, на который возлагаются дополнительные обязанности;
- Decorator - декоратор: хранит ссылку на объект Component и определяет интерфейс, соответствующий интерфейсу Component;
- ConcreteDecorator (BorderDecorator, ScrollDecorator) - конкретный декоратор: возлагает дополнительные обязанности на компонент.
Decorator переадресует запросы объекту Component. Может выполнять и дополнительные операции до и после переадресации.
У паттерна декоратор есть, по крайней мере, два плюса и два минуса:
- Большая гибкость, нежели у статического наследования.
- Позволяет избежать перегруженных функциями классов на верхних уровнях иерархии.
- Декоратор и его компонент не идентичны.
- Множество мелких объектов. (При использовании в проекте паттерна декоратор нередко получается система, составленная из большого числа мелких объектов, которые похожи друг на друга различаются только способом взаимосвязи, а не классом и не значениями своих внутренних переменных. Хотя проектировщик, разбирающийся в устройстве такой системы, может легко настроить ее, но изучать и отлаживать ее очень тяжело.)
