Декоратор (Decorator) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Описание)
(Описание)
Строка 9: Строка 9:
 
=== Описание ===
 
=== Описание ===
 
В некоторых ситуациях необходимо возложить дополнительные обязанности на объект, а не на класс в целом. Решения на основе наследования - статические, т.е. принимаемые на этапе компиляции, и поэтому не являются достаточно гибкими.
 
В некоторых ситуациях необходимо возложить дополнительные обязанности на объект, а не на класс в целом. Решения на основе наследования - статические, т.е. принимаемые на этапе компиляции, и поэтому не являются достаточно гибкими.
 +
 +
Паттерн декоратор предлагает следующий подход: поместить компонент в другой объект, называемый Декоратором, который как раз и добавляет новые свойства.
 +
 +
Декоратор удовлетворяет интерфейсу исходного объекта, поэтому отдекорированный объект можно использовать как исходный. Декоратор переадресует запросы внутреннему компоненту и может выполнять дополнительные (декорирующие) действия.
 +
 +
Декораторы могут вкладываться друг в друга, добавляя любое количество новых свойств.
  
 
=== Реализация ===
 
=== Реализация ===

Версия 08:03, 4 августа 2014

К основной странице курса

Другое название

Обертка (Wrapper)

Назначение

Динамически добавляет объекту новые свойства (без использования наследования, на этапе выполнения).

Описание

В некоторых ситуациях необходимо возложить дополнительные обязанности на объект, а не на класс в целом. Решения на основе наследования - статические, т.е. принимаемые на этапе компиляции, и поэтому не являются достаточно гибкими.

Паттерн декоратор предлагает следующий подход: поместить компонент в другой объект, называемый Декоратором, который как раз и добавляет новые свойства.

Декоратор удовлетворяет интерфейсу исходного объекта, поэтому отдекорированный объект можно использовать как исходный. Декоратор переадресует запросы внутреннему компоненту и может выполнять дополнительные (декорирующие) действия.

Декораторы могут вкладываться друг в друга, добавляя любое количество новых свойств.

Реализация

Диаграмма классов

DecoratorCommon.png

Участники

Пример

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

Декоратор принимает отдекорированный предыдущими декораторами объект и возвращает объект с дополнительной декорацией.

Пример. Фримен. Кофе и дополнения: шоколад, ваниль, молоко, пена...

Код

Достоинства и недостатки

Варианты