装饰设计模式
动态的给一个对象增加一些额外的职责。
缺点:多层的装饰是复杂的。
使用场景:
1、需要扩展一个类的功能,或给一个类增加附加功能;
2、动态的给一个对象增加功能,这些功能可以再动态的撤销;
3、需要为一批兄弟类进行改装或者加装功能,当然是首选装饰模式。
//抽象构件
public abstract class Component {
public abstract void operate();
}
//具体构件
public class ConcreteConponent extends Component {
@Override
public void operate() {
System.out.println("do something");
}
}
//抽象装饰者
public abstract class Decorator extends Component {
private Component component = null;
public Decorator(Component component) {
super();
this.component = component;
}
@Override
public void operate() {
this.component.operate();
}
}
//具体装饰类
public class ConcreteDecorator1 extends Decorator {
public ConcreteDecorator1(Component component) {
super(component);
}
@Override
public void operate() {
this.method1();
super.operate();
}
private void method1() {
System.out.println("具体装饰类1 do 1 thing ");
}
}
public class ConcreteDecorator2 extends Decorator {
public ConcreteDecorator2(Component component) {
super(component);
}
@Override
public void operate() {
super.operate();
this.method1();
}
private void method1() {
System.out.println("具体装饰类2 do thing 2");
}
}
public class Client {
public static void main(String[] args) {
Component component = null;
component = new ConcreteConponent();
component = new ConcreteDecorator1(component);
component = new ConcreteDecorator2(component);
component.operate();
}
}