基本概念
指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)。
应用场景
问题
如图,因业务需要,在调用operate()方法之前或者之后,需要做一些额外的操作,如果直接改动现有代码,明显不符合开闭原则。
调整
如下图,增加一个Decorator类,它的operate方法会在实际operate方法之外增加一些额外的操作。
示例代码
public class DecoratorPatternTest {
public static void main(String[] args) {
InterfaceA interfaceA = new ConcreteA();
Decorator decorator = new Decorator(interfaceA);
decorator.operate();
}
public interface InterfaceA{
void operate();
}
public static class ConcreteA implements InterfaceA{
@Override
public void operate() {
System.out.println("operate...");
}
}
public static class Decorator implements InterfaceA{
InterfaceA interfaceA;
public Decorator(InterfaceA interfaceA){
this.interfaceA = interfaceA;
}
@Override
public void operate() {
System.out.println("this is decoration code...");
interfaceA.operate();
}
}
}