Декоратор (Decorator) — различия между версиями
Admin (обсуждение | вклад) (→Описание) |
Admin (обсуждение | вклад) (→Пример) |
||
Строка 31: | Строка 31: | ||
=== Пример === | === Пример === | ||
Пример. В Java - разновидности файловых потоков. К стандартному файловому потоку могут быть добавлены декораторы буферизации, шифрования, архивации и проч. в любых комбинациях. | Пример. В Java - разновидности файловых потоков. К стандартному файловому потоку могут быть добавлены декораторы буферизации, шифрования, архивации и проч. в любых комбинациях. | ||
− | |||
− | |||
Пример. Фримен. Кофе и дополнения: шоколад, ваниль, молоко, пена... | Пример. Фримен. Кофе и дополнения: шоколад, ваниль, молоко, пена... |
Версия 08:12, 4 августа 2014
Другое название
Обертка (Wrapper)
Назначение
Динамически добавляет объекту новые свойства (без использования наследования, на этапе выполнения).
Описание
В некоторых ситуациях необходимо возложить дополнительные обязанности на объект, а не на класс в целом. Решения на основе наследования - статические, т.е. принимаемые на этапе компиляции, и поэтому не являются достаточно гибкими.
Паттерн декоратор предлагает следующий подход: поместить компонент в другой объект, называемый Декоратором, который как раз и добавляет новые свойства.
Декоратор удовлетворяет интерфейсу исходного объекта, поэтому отдекорированный объект можно использовать как исходный. Декоратор переадресует запросы внутреннему компоненту и может выполнять дополнительные (декорирующие) действия.
Декораторы могут вкладываться друг в друга, добавляя любое количество новых свойств.
Назначение
Декоратор предназначен:
- для динамического добавления обязанностей объектам
- для реализации обязанностей, которые могут быть сняты с объекта
- когда расширение путем порождения подклассов неудобно
Реализация
Диаграмма классов
Участники
Пример
Пример. В Java - разновидности файловых потоков. К стандартному файловому потоку могут быть добавлены декораторы буферизации, шифрования, архивации и проч. в любых комбинациях.
Пример. Фримен. Кофе и дополнения: шоколад, ваниль, молоко, пена...