模式定义:
在不改变原有对象的基础上,将功能附加到对象上。
应用场景:
扩展一个类的功能或者给一个类添加附加职责
优点:
1) 不改变原有对象的情况下给一个对象扩展功能
2)使用不同的组合可以实现不同的效果
3)符合开闭原则
它符合设计模式中的开闭原则,对修改关闭,对拓展开放
定义一个Component接口,ConcreteComponent类实现Component接口;定义抽象类Decorator实现Component;抽象类Decorator实现Component接口;最后我们添加功能的类ConreteDecorator实现Decorator类即可添加具体的功能。
具体代码实现如下
public class DecoratorTest { public static void main(String[] args) {// Decorator conreteDecorator1 = new ConreteDecorator1(new ConcreteComponent()); Decorator conreteDecorator1 = new ConreteDecorator2(new ConreteDecorator1(new ConcreteComponent())); conreteDecorator1.operation(); }}interface Component{ void operation();}class ConcreteComponent implements Component { @Override public void operation() { System.out.println(" 拍照 "); }}abstract class Decorator implements Component { Component component; public Decorator(Component component) { this.component = component; }}class ConreteDecorator1 extends Decorator { public ConreteDecorator1(Component component) { super(component); } @Override public void operation() { System.out.println(" 添加美颜 "); component.operation(); }}class ConreteDecorator2 extends Decorator { public ConreteDecorator2(Component component) { super(component); } @Override public void operation() { System.out.println(" 添加滤镜 "); component.operation(); }}
运行结果:
实际应用:
javax.servlet.http.HttpServletRequestWrapper
javax.servlet.http.HttpServletResponseWrapper