В этой статье описываются принципы и использование декоративных способов дизайна Java. Поделитесь этим для вашей ссылки, следующим образом:
Декоративный режим может динамически расширять функциональность объекта без изменения исходного файла и используя наследование. Он охватывает настоящий объект путем создания объекта обертки, то есть украшения. Дизайн IO в JDK использует декоративный режим, который может расширить функцию, обернув поток узла через поток фильтрации.
Композиция персонажа в декоративном режиме:
① Роль абстрактного компонента: дайте абстрактный интерфейс для стандартизации объектов, которые готовы к выполнению функций обработки. (InputStream, OutputStream)
② Роль конкретной компоненты: определяет класс, который будет получать дополнительные функции. (Поток узлов)
③ Роль декоратора: содержит экземпляр компонентного объекта и реализует интерфейс, соответствующий интерфейсу абстрактного компонента. (FilterInputStream, FilterOutputStream)
④ Роль декоратора бетона: Отвечает за добавление дополнительных функций в компонентные объекты. (Поток фильтров с конкретными дополнительными функциями, BufferedInputStream, DataInputStream и т. Д.)
Вот простой пример декоративного рисунка:
1. Роль абстрактного компонента : определить компонент интерфейса
пакет com.tydic.decorator; // Аннотация роль компонента компонента публичного интерфейса {public void dosomething ();}2. Конкретные строительные роли : вам необходимо реализовать роли абстрактных компонентов, и вы можете добавить некоторые обязанности к этому объекту.
пакет com.tydic.decorator;/** * Конструкция конкретной роли, реализация абстрактной роли строительство * @author Administrator * */Public Class ConceteComponent реализует компонент {@Override public void dosomething () {System.out.println ("function a"); }} 3. Украсьте роль : удерживайте объект для создания ссылки на роль и реализации ролей абстрактных компонентов. Роль абстрактного компонента реализована, потому что тип не может быть изменен после добавления функций, точно так же, как FilterInputStream по -прежнему остается входным потоком, который по -прежнему имеет характеристики входного потока. Ссылка на роль создания объекта заключается в том, что для добавления функций вы должны соблюдать ссылку на роль компонента, к которой должна быть прикреплена функция.
Пакет com.tydic.decorator;/*** Украсьте роль, содержите ссылку на роли компонента и реализуйте роль компонента* Если вы хотите добавить функцию, вы должны реализовать роль компонента. Чтобы добавить функцию, вы должны соблюдать ссылку на роль компонента, которая будет подключена. Вот почему вы должны содержать ссылку на роль компонента * @author Administrator * *//Public Class Decorator реализует компонент {частный компонент компонента; // Это роль компонента, которая должна быть прикреплена, которая может быть загружена, когда созданный общедоступный декоратор (компонент компонента) {this.component = component; } @Override public void dosomething () {component.dosomething (); }}4. Конкретная декоративная роль : декоративные роли должны быть унаследованы, и прикреплены функции, которые должны быть прикреплены.
Пакет com.tydic.decorator;/** * Для конкретной декоративной роли 1 декоративная роль должна быть унаследована, а функции, которые должны быть прикреплены, приведены * @author Administrator * */public Class Concretedecorator1 Extends Decorator {public ConcretEdecorator1 (компонент компонента) {Super (Component); } @Override public void dosomething () {super.dosomething (); this.doanothing (); // Добавить функции на основе исходных функций прошедших ролей компонентов} // Дополнительные функции public void doanothing () {System.out.println ("function b"); }} Пакет com.tydic.decorator;/** * Для конкретной декоративной роли 2 декоративная роль должна быть унаследована, а функции, которые должны быть прикреплены, приведены * @author Administrator * */Public Class Concretedecorator2 Extends Decorator {public ConcretEdecorator2 (компонент компонента) {Super (Component); } @Override public void dosomething () {super.dosomething (); this.doanothing (); // дополнительные функции public void doanothing () {system.out.println ("function c"); }}5. Напишите клиентский код
Package com.tydic.decorator; Public Class Client {public static void main (string [] args) {component component = new ConceteComponent (); // Создание компонента роли компонента2 = new ConcretEdecorator1 (компонент); // Определение компонента компонента 3 = New ConcretEdecorator2 (Component2); ///decorate Decoraton3); }}Суммировать:
Декоративный режим может использовать метод комбинации и динамически развернуть объекты во время выполнения без наследования. Это то, что наследство не может сделать. Наследование статично, расширение на класс.
Преимущества и недостатки декоративного режима:
Преимущества: 1. Распространение функции объекта, которая является более гибкой, чем наследование. 2. Используя различные конкретные декоративные категории, а также расположение и сочетание этих декоративных категорий, дизайнеры могут создавать множество комбинаций различных поведений.
Недостатки: это сделает программу более сложной.
Для получения дополнительного контента, связанного с Java, читатели, заинтересованные в этом сайте, могут просмотреть темы: «Введение и расширенное учебное пособие по объектно-ориентированному программам Java», «Учебное пособие по структуре данных Java и алгоритм», «Суммарной навыки Java Dom Node», «Суммируют навыки работы навыков операции Java File File и Directory» и «Summary of Java CACEE CACEE».
Я надеюсь, что эта статья будет полезна для всех Java Programming.