концепция
Образец декоратора динамически присоединяется к объекту. Чтобы расширить функциональность, декоратор обеспечивает более гибкую альтернативу, чем наследование.
Декоратор и украшенный объект имеют тот же супертип.
Вы можете обернуть объект одним или несколькими декораторами.
Поскольку декоратор и украшенный объект имеют тот же супертип, в любом случае, когда требуется исходный объект (написанный), украшенный объект может быть заменен на него.
Декоратор может добавлять свое собственное поведение до и/или после того, как действия декоратора поручили достичь определенной цели.
Объекты могут быть украшены в любое время, поэтому объекты могут быть динамически и неограниченно украшены вашим любимым декоратором во время выполнения.
В Java многие классы в пакете IO являются воплощением типичных узоров декоратора, таких как:
Декоративный класс реализует тот же интерфейс, что и украшенный класс.
Украшенный класс не заботится о том, какой класс реализации используется для его украшения.
Тот же бизнес -метод называется декоративным классом для улучшения функций декоративного класса.
Пример:
Классная диаграмма
публичный интерфейс ireader {void read (); } public Class Reader реализует ireader {@Override public void Read () {System.out.println ("Читать читатель"); }} открытый класс BufferedReader реализует iReader {private ireader mreader; public BufferedReader (Reader Reader) {this.mreader = reader; } @Override public void read () {System.out.println ("Читать о буферизации"); mreader.read (); }} public Class Test {public static void main (string [] args) {reader reader = new Reader (); reader.read (); System.out.println ("-----------"); BufferedReader BufferedReader = New BufferedReader (Reader); BufferedReader.read (); }} Функции:
1. Декоративные объекты и реальные объекты имеют одинаковый интерфейс. Таким образом, клиент -объект может взаимодействовать с декоративным объектом так же, как и настоящий объект.
2. Декоративный объект содержит ссылку на реальный объект
3. Декоративный объект принимает все запросы от клиента. Это пересылает эти запросы в реальное объект.
4. Украсить объекты могут добавить некоторые дополнительные функции до или после пересылки этих запросов. Это гарантирует, что во время выполнения дополнительные функции могут быть добавлены извне, не изменяя структуру данного объекта.
В объектно-ориентированном дизайне функциональные расширения до данного класса обычно достигаются посредством наследования. После украшения реальный объект поддерживается для улучшения его функции.
Разница между декоратором и режимом адаптера:
О новых обязанностях: адаптеры также могут добавлять новые обязанности при конвертации, но основная цель - нет. Модель декоратора в основном добавляет новые обязанности декоратору.
Об объекте, который он завершает: адаптер знает детали адаптера (то есть класс адаптера). Декоратор только знает, что такое его интерфейс.
Что касается его конкретного типа (будь то базовый класс или другой полученный класс), он известен только во время выполнения.