Это структурный шаблон проектирования, который применяется когда нужно добавить определенную функционально отдельному объекту, а не целому классу.
Допустим у нас есть Объект который что-то делает с другим объектом. Например, сохраняет какой либо файл на диск, сериализует в xml и сохраняет.
Проходит время, этот класс уже используем в 1000 мест в проекте.
И тут понимаем, что нельзя хранить наши объекты просто сериазиованными, их могут открыть простым текстовым редактором и прочесть важную информацию! Не безопасно!Нам нужно добавить к классу Writer новую функциональность шифрования.
Описание проблемы:
Нужно изменить поведение объекта только в нескольких местах. В зависимости от ситуации может потребоваться несколько вариантов расширения поведения(возможны комбинации добавляемых функций: шифрование и сжатие, шифрование и подпись ключом)
Как это сделать? Менять сам класс, нельзя, т.к. мы хотим использовать так же и сохранение данные без шифрования. Можем сделать наследника от Writer и переопределить метод Write, чтоб тот предварительно все шифровал. Наследование, вроде подходит.. А представим, что нам нужно применять шифрование опционально, в зависимости от выбора пользователя добавлять шифрование, сжатие, подписывание ключом. Мы будем создавать наследников для всех этих случаев? И для их комбинаций тоже? Не очень красивое решение. В такой ситуации хорошо подходит использовать шаблон Декоратор.
More...
30532a35-f1c0-465b-a581-79c6a77c1d5a|3|4.7
Architecture, Design Patterns
design patterns, decorator