Шаблон декоратора используется, когда вы хотите, чтобы объект типа (интерфейса) А делал больше, чем в настоящее время.Примером может быть: Веб-страница (логический экран), которая соответствует вашему физическому экрану, не нуждается в полосе прокрутки.однако, если страница (логический экран) не умещается на физическом экране, вы должны украсить ее полосой прокрутки.В словах GOF: цель Decorator состоит в том, чтобы динамически добавлять дополнительные обязанности к объекту.
В коде, который будет выглядеть следующим образом:
interface LogicalScreen {
void render(String physical );
}
Реализация:
class SimpleScreen implements LogicalScreen {
public void render(String physical) {
// render itself
}
}
Внедрение декоратора:
class ScreenWithScrollbar implements LogicalScreen {
private final LogicalScreen decoratd;
public ScreenWithScrollbar(LogicalScreen decorated) {
this.decoratd = decorated;
}
public void render(String physical) {
// render scroll bar
// ...
// render the decorated
decoratd.render(physical);
// eventually do some more stuff
}
public doScroll() {}
}
Как подключено:
public class WhatIsDecorator {
public static void main(String[] args) {
LogicalScreen l1 = new SimpleScreen();
LogicalScreen ds = new ScreenWithScrollbar(l1);
ds.render("MyMonitor");
}
}
Вы можете связать столько, сколько вам нужно.Decorator2 (Декоратор1 (Простой)) ...