interface InterfaceComponent {
void doOperation();
}
class MainComponent implements InterfaceComponent {
@Override
public void doOperation() {
}
}
abstract class Decorator implements InterfaceComponent {
protected InterfaceComponent component;
public Decorator (InterfaceComponent c) {
component = c;
}
@Override
public void doOperation() {
component.doOperation();
}
public void newOperation() {
System.
out.
println("Do Nothing"); }
}
class DecoratorSpace extends Decorator{
public DecoratorSpace(InterfaceComponent c) {
super(c);
}
@Override
public void doOperation() {
super.doOperation();
}
@Override
public void newOperation() {
super.newOperation();
System.
out.
println("New space operation"); }
}
class DecoratorComma extends Decorator {
public DecoratorComma(InterfaceComponent c) {
super(c);
}
@Override
public void doOperation() {
super.doOperation();
}
@Override
public void newOperation() {
super.newOperation();
System.
out.
println("New comma operation"); }
}
class DecoratorHello extends Decorator {
public DecoratorHello(InterfaceComponent c) {
super(c);
}
@Override
public void doOperation() {
super.doOperation();
}
@Override
public void newOperation() {
super.newOperation();
System.
out.
println("New hello operation"); }
}
class Main {
public static void main
(String[] args
) { Decorator c = new DecoratorHello(new DecoratorSpace(new DecoratorComma(new MainComponent())));
c.doOperation(); // Результат выполнения программы "Hello, World!"
c.newOperation(); // New hello operation
}
}