用途:扩展一个类或者给一个类添加附加职责
优点:1.在不改变原有对象的情况下给一个对象扩展功能
2.使用不同组合实现不同效果
3.符合开闭原则:对修改关闭对扩展开放
public class TestDecoration {
public static void main(String[] args) {
componet0 base1= new meiyan(new base());
base1.operation();
}
}
interface componet0{
public void operation();
}
class base implements componet0{
@Override
public void operation() {
System.out.println("普通拍照");
}
}
/**
* 定义成抽象类的话 不用去实现operation方法 交给它的子类去实现
*/
abstract class Decoration implements componet0{
componet0 componet0;//就相当于持有了原始功能
public Decoration(componet0 componet0){
this.componet0 = componet0 ;
}
}
class meiyan extends Decoration{
public meiyan(componet0 componet0) {
super(componet0);
}
public void operation(){
componet0.operation();
System.out.println("美颜");
}
}
小结:serveletAPI、HttpRequestServletWrapper / HttpRequestServletWrapper 等都是使用了此设计模式