Шаблон "Декоратор" (Decorator)

max аватар
129

Шаблон "Декоратор" помогает добавить поведение или обязанности к объекту. Он даже называется Враппер. Предположим, у нас есть 6 объектов и  для двух из них мы хотим специфическое поведение. Это можно сделать с использованием декоратора.

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

Шаблон Декоратор может быть использован в тех случаях, когда необходимо добавить дополнительный функционал к объекту или группе объектов. Рассмотрим пример с Рождественской Елкой. Нам необходимо его разукрасить (декорировать). У нас есть много веток, которые необходимо украсить по-разному.

Рассмотрим базовый класс Декоратор:

Этот класс содержит лишь один метод place(). Этот метод развешивает различные типы наименований на ветки елки. Класс ChristmasTree очень простой и содержит лишь один метод, который возвращает ветку.

ChristmasTree.java

Теперь мы можем декорировать ветки тремя различными методами. Один из них - развешивание цветных шариков, второй - развешивание цветных ленточек, а третий - цветных звезд.

BallDecorator.java

По такому же принципу можно сделать StarDecorator и RufflesDecorator. Теперь посмотрим, как можно использовать декоратор. Все просто, нужно лишь передать ссылку на объект класса ChristmasTree в декоратор. 


Конец
Михаил Васильевич Ломоносов предполагает, что ленивый человек в беспечном покое сходен с неподвижною болотною водою, которая кроме смраду и презренных гадин ничего не производит.

> branch.put("ball");

звідки метод   .put()  ?

 

> branch.put("ball");
звідки метод .put() ?

package structural.decorator;

public class Branch {
   private String decoration;

   public void put(String decoration){
     this.decoration = decoration;
   }
}

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке