Skip to content

Instantly share code, notes, and snippets.

@slmanju
Created January 26, 2018 11:00
Show Gist options
  • Save slmanju/37453bb169fc773eab2eed479782d83c to your computer and use it in GitHub Desktop.
Save slmanju/37453bb169fc773eab2eed479782d83c to your computer and use it in GitHub Desktop.
Decorator design pattern with Java
interface Component {
void doSomething();
}
public class ComponentA implements Component {
public ComponentA() {
}
@Override
public void doSomething() {
System.out.println("i'm doing simple things");
}
}
public abstract class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void doSomething() {
this.component.doSomething();
}
}
public class DecoratorA extends Decorator {
public DecoratorA(Component component) {
super(component);
}
public void doSomething() {
super.doSomething();
System.out.println("i'll add A");
}
}
public class DecoratorB extends Decorator {
public DecoratorB(Component component) {
super(component);
}
public void doSomething() {
super.doSomething();
System.out.println("i'll add B");
}
}
public class DecoratorDemo {
public static void main(String[] args) {
Component component = new ComponentA();
component.doSomething();
System.out.println("\n----------------------------\n");
Component decoratedComponent = new DecoratorA(component);
decoratedComponent.doSomething();
System.out.println("\n----------------------------\n");
decoratedComponent = new DecoratorB(component);
decoratedComponent.doSomething();
System.out.println("\n----------------------------\n");
decoratedComponent = new DecoratorB(new DecoratorA(component));
decoratedComponent.doSomething();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment