Что такое режим декоратора?
Динамически добавьте некоторые дополнительные обязанности в объект. С точки зрения добавления функций режим декоратора более гибкий, чем генерирование подклассов.
1. Структура
Компонент: определяет интерфейс объекта, который может динамически добавлять обязанности к этим объектам.
Интерфейс компонент {public void anpormation ();} conceteComponent: реализовать интерфейс, определенный компонентом. Class ConcreteComponent реализует компонент {@Override public void Operation () {System.out.println («Начальное поведение»); }} Декоратор: Украсьте абстрактный класс, наследует компонент, расширяет функции класса компонентов из внешних классов, но для компонентов нет необходимости знать существование декоратора.
Декоратор класса реализует компонент {// удерживать объект компонента и сформировать отношение агрегации с компонентом компонента компонента; // пройти в объект, чтобы быть дополнительно измененным публичным декоратором (компонент компонента) {this.component = component; } @Override // Вызовите исходный метод, который будет изменен public void Operation () {component.Operation (); }} Concretedecorator: конкретные декоративные объекты играют функцию добавления обязанностей для компонентов.
Class ConcretedeCoratora Extends Decorator {Private String AddState = "Новое свойство 1"; public concretedecoratora (компонент компонента) {super (компонент); } public void Operation () {super.Operation (); System.out.println ("Добавить атрибут:" + добавленная организация); }} class concretedecoratorb extends decorator {public concretedecoratorb (компонент компонента) {super (компонент); } public void Operation () {super.Operation (); Добавлен behadior (); } public void AddeBehavior () {System.out.println ("добавить поведение"); }} Тестовый код
открытый класс deceratorPattern {public static void main (string [] args) {component component = new ConceteComponent (); component.operation (); System.out.println ("======================================================================================== ==================================================================== ===================================================================== ==================================================================== ==================================================================== ==================================================================== ===================================================================== System.out.println ("======================================================================================== }} Результаты бега
Исходный Поведение ================================================================== ======================================================================= ======================================================================= =======================================================================
2. Сценарии приложения
1. Необходимо добавить обязанности к одному объекту динамически и прозрачно, то есть он не влияет на другие объекты.
2. Вам необходимо динамически добавить функции в объект, и эти функции могут быть динамически уничтожены.
3. Необходимо добавить большое количество функций, генерируемых расположением и комбинацией некоторых основных функций, чтобы соотношение наследования становилось нереалистичным.
4. Когда метод генерации подклассов не может быть использован для расширения. Одним из сценариев является то, что может быть большое количество независимых расширений, которые будут создавать большое количество подклассов для поддержки каждой комбинации, что приведет к взрыву количества подклассов. Другой случай может быть связан с тем, что определение класса скрыто, или определение класса не может быть использовано для генерации подклассов.
3. Ключевые моменты
1. Декоративные объекты и реальные объекты имеют одинаковый интерфейс. Таким образом, клиент -объект может взаимодействовать с декоративным объектом так же, как и настоящий объект.
2. Декоративный объект содержит ссылку на реальный объект.
3. Декоративный объект принимает все запросы от клиента. Это пересылает эти запросы в реальное объект.
4. Декоративные объекты могут добавить некоторые дополнительные функции до или после пересылки этих запросов. Это гарантирует, что во время выполнения дополнительные функции могут быть добавлены извне, не изменяя структуру данного объекта. В объектно-ориентированном дизайне функциональные расширения до данного класса обычно достигаются посредством наследования.
Выше приведено введение в соответствующий контент о режиме декоратора Java, я надеюсь, что это будет полезно для каждого обучения.