Рубрики
Без рубрики

Шаблон Дизайна Декоратора. Шаблон декоратора на Java. Шаблон дизайна декоратора в примере Java, Диаграмма классов, Преимущества и недостатки, пример использования JDK.

Шаблон Дизайна Декоратора. Шаблон декоратора на Java. Шаблон дизайна декоратора в примере Java, Диаграмма классов, Преимущества и недостатки, пример использования JDK.

Автор оригинала: Pankaj Kumar.

Шаблон дизайна декоратора используется для изменения функциональности объекта во время выполнения. В то же время это не повлияет на другие экземпляры того же класса, поэтому отдельный объект получает измененное поведение. Шаблон дизайна декоратора является одним из шаблонов структурного дизайна (например, Шаблон адаптера , Шаблон моста , Составной шаблон ) и использует абстрактные классы или интерфейс с композицией для реализации.

Шаблон Дизайна Декоратора

Мы используем наследование или композицию для расширения поведения объекта, но это делается во время компиляции и применимо ко всем экземплярам класса. Мы не можем добавить какую – либо новую функциональность для удаления любого существующего поведения во время выполнения-это когда появляется шаблон декоратора.

Предположим, мы хотим реализовать различные типы автомобилей – мы можем создать интерфейсный автомобиль для определения метода сборки, а затем у нас может быть базовый автомобиль, далее мы можем расширить его до спортивного автомобиля и автомобиля класса люкс. Иерархия реализации будет выглядеть так, как показано на рисунке ниже.

Но если мы хотим получить автомобиль во время выполнения, который обладает как функциями спортивного автомобиля, так и роскошного автомобиля, то реализация усложняется, и если мы хотим уточнить, какие функции следует добавить в первую очередь, это становится еще более сложным. Теперь представьте, что если у нас будет десять различных типов автомобилей, логикой реализации, использующей наследование и композицию, будет невозможно управлять. Чтобы решить такую ситуацию программирования, мы применяем шаблон декоратора в java.

Нам нужны следующие типы для реализации шаблона дизайна декоратора.

  1. Интерфейс компонента – Интерфейс или абстрактный класс , определяющий методы, которые будут реализованы. В нашем случае Автомобиль будет интерфейсом компонента.

  2. Реализация компонента – Базовая реализация интерфейса компонента. Мы можем иметь Базовый автомобиль класс в качестве нашей компонентной реализации.

  3. Декоратор – Класс декоратора реализует интерфейс компонента и имеет связь с интерфейсом компонента. Переменная компонента должна быть доступна дочерним классам декоратора, поэтому мы сделаем эту переменную защищенной.

  4. Конкретные декораторы – Расширение функциональности базового декоратора и соответствующее изменение поведения компонентов. У нас могут быть классы декораторов бетона, такие как Роскошный автомобиль и Спортивный автомобиль .

Шаблон Дизайна Декоратора – Диаграмма Классов

Программа Тестирования Шаблонов Дизайна Декоратора

package com.journaldev.design.test;

import com.journaldev.design.decorator.BasicCar;
import com.journaldev.design.decorator.Car;
import com.journaldev.design.decorator.LuxuryCar;
import com.journaldev.design.decorator.SportsCar;

public class DecoratorPatternTest {

	public static void main(String[] args) {
		Car sportsCar = new SportsCar(new BasicCar());
		sportsCar.assemble();
		System.out.println("\n*****");
		
		Car sportsLuxuryCar = new SportsCar(new LuxuryCar(new BasicCar()));
		sportsLuxuryCar.assemble();
	}

}

Обратите внимание, что клиентская программа может создавать различные типы объектов во время выполнения, и они также могут указывать порядок выполнения.

Результатом вышеуказанной тестовой программы является:

Basic Car. Adding features of Sports Car.
*****
Basic Car. Adding features of Luxury Car. Adding features of Sports Car.

Шаблон Дизайна Декоратора – Важные Моменты

  • Шаблон дизайна декоратора полезен для обеспечения возможностей модификации во время выполнения и, следовательно, более гибок. Его легко поддерживать и расширять, когда количество вариантов больше.
  • Недостатком шаблона дизайна декоратора является то, что в нем используется много подобных объектов (декораторов).
  • Шаблон декоратора часто используется в классах Java IO , таких как FileReader, BufferedReader и т.д.