В этой статье описывается случай, когда окрашенные булочки, внедренные Java, на основе рисунка декоратора. Поделитесь этим для вашей ссылки, следующим образом:
1. Определение шаблона
Паттерн декоратора динамически расширяет функцию объекта, не изменяя исходный файл и не используя наследование. Он охватывает реальный объект путем создания оберточного объекта, то есть украшения.
Декоративные объекты и реальные объекты имеют одинаковый интерфейс, поэтому клиентские объекты могут взаимодействовать с декоративными объектами так же, как и реальные объекты.
Декоративный объект содержит ссылку на реальный объект.
2. Примеры модели
1. Анализ шаблона
Мы используем случай с черносердечными поставщиками, чтобы сделать окрашенные булочки, чтобы проиллюстрировать эту модель.
2. Статическая классная диаграмма режима декоратора
3. Пример кода
3.1 Создать интерфейс булочки на пару - ibread
Пакет com.demo.abs;/** * Интерфейс обработки обработки паровая булочка * * @author * */public interface ibread {// Подготовка материалов public void prepair (); // Harmony Public void коленок (); // парированные булочки Public void Pareed (); / *** Обработка парированных булочек*/ public void Process ();}3.2 Нормальная реализация булочки - нормальный хлеб
пакет com.demo.abs;/** * Реализация обычных парированных булочек * * @author * */public class нормальный хлеб реализует ibread {// Подготовка ингредиентов public prepair () {System.out.println («Подготовьте муку, воду и разрыхлитель ...»); } // Hemian public void колено () {System.out.println ("hmian ..."); } // Pareed Buns public void pareed () {System.out.println ("Парированные булочки ... ароматные парированные булочки выходят из духовки!"); } / *** Обработка парированных булочек* / public void Process () {// Приготовление ингредиентов Prepair (); // mineadflour (); // приготовленный на пару (); }}3.3 Создайте абстрактный декоратор - Abstractbread
Пакет com.demo.decorator; import com.demo.abs.ibread;/** * Аннотация декоратор * * @author * */public абстрактный класс Abstractbread реализует ibread {// магазин входящего объекта Ibread Private Final Ibread Head; Public Abstractbread (Ibread Hread) {this.bread = хлеб; } // Подготовьте материал public void preepare () {this.bread.prepair (); } // Аккуратно публичный void колентол () {this.bread.kneadflour (); } // Pareed Buns public void pareed () {this.bread.steamed (); } // Обработка парированных булочек public void process () {prepair (); колено (); приготовленный (); }}3.4 Создайте декоратор красителя - Corndecorator
Пакет com.demo.decorator; import com.demo.abs.ibread;/** * Dyeed Corn Buns * * @author * */public Class Corndecorator Extrablebread {// Сделать метод Public CornDecorator (Ibread Bread) {Super (хлеб); } // Чернообразные поставщики начали окрасить public void paint () {System.out.println («Добавить лимонный желтый цвет ...»); } // перегружать метод теста родительского класса @Override public void колено () {// this.paint () запускается после добавления красителя в муку; // вставьте super.neadflour (); }}3.5 Создать декоратор Scalypse - SweetDecorator
пакет com.demo.decorator; import com.demo.abs.ibread;/** * cyperus pareed bun * * @author * */public class sweetdecorator расширяет Abstractbread {// СОЗДАТЬ МЕТОД Public SweetDecorator (Ibread Bread) {Super (хлеб); } // Черносердечные поставщики начинают добавлять Cyperus public void paint () {System.out.println ("Добавить Cyperus ..."); } // перегружать метод теста родительского класса @Override public void колено () {// запустить тесто this.paint () после добавления Cyperus в муку; // hemma super.neadflour (); }}3.6 Производство булочки с приготовлением к приготовлению сладкой кукурузы - клиент
пакет com.demo; import com.demo.abs.ibread; import com.demo.abs.normalbread; import com.demo.decorator.corndecorator; import com.demo.decorator.sweetdecorator;/** * Приложение клиента * * @author */public clim // Производство декоративных парированных булочных систем. // Создать нормальный нормальный экземпляр BUN на парена // Это экземпляр объекта, который нам нужно обернуть (украсить) ibread normalbread = new Normalbread (); // Давайте начнем украшать обычные булочки на пару! ! ! // Использование сахарина для украшения булочек на пару normalbread = new SweetDecorator (Normalbread); // Использование лимонного желтого цвета, чтобы украсить парированные булочки normalbread = new Corndecorator (Normalbread); // Производство информации о приготовленной на пару Bun Information normalbread.process (); System.out.println ("===== Украсьте конец на пару булочек !!!); }}4. Результаты работы
==== Начните украшать булочки на пару! ! !
Приготовьте муку, воду и разрыхлитель ...
Добавить лимонный желтый цвет ...
Добавить цианин ...
Смазка ...
Приготовленные на пару булочки ... ароматные булочки на пару выходят из духовки!
==== Декоративная булочка на пару! ! !
3. Принципы дизайна этой модели
1 закрытая часть изменения
2 «открытый и близкий» принцип
3 абстрактные ориентированные программы
4. предпочитают комбинации, а не наследование
4. Используйте случаи
1. Когда нам нужно динамически добавить новую функцию или ответственность к существующему объекту, мы можем рассмотреть возможность использования рисунка декоратора.
2. Когда обязанности объекта часто изменяются или обязанности должны быть динамически увеличены, избегайте добавления унаследованного расширения подкласса для адаптации к таким изменениям, потому что этот метод приведет к тому, что подкласс будет слишком быстро расширяться и будет трудно контролировать. В настоящее время можно использовать режим декоратора.
5. Статическая классная диаграмма режима декоратора
Для получения дополнительной информации об алгоритмах Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Учебное пособие по структуре данных Java и алгоритм», «Сводка операции Java Dom Node», «Сводка Java File и каталог
Я надеюсь, что эта статья будет полезна для всех Java Programming.