意图:动态为对象添加职责
例子
package 装饰器;
public abstract class Component {
void print(){};
}
package 装饰器;
public abstract class AbstractDecorator extends Component {
Component delegate ;
public void setDelegate(Component delegate){
this.delegate=delegate;
}
public Component getDelegate(){
return delegate;
}
public void print(){
Component component=getDelegate();
component.print();
if(component!=null)
warpDelegate();
}
abstract void warpDelegate();
}
package 装饰器;
public class ConcreteComponet extends Component{
@Override
public void print() {
System.out.println("main");
}
}
package 装饰器;
public class ConcreteDecorator extends AbstractDecorator {
public void warpDelegate(){
System.out.println("footer");
}
public static void main(String []args){
AbstractDecorator c=new ConcreteDecorator();
AbstractDecorator b=new ConcreteDecorator();
c.setDelegate(b);
ConcreteComponet d=new ConcreteComponet();
b.setDelegate(d);
c.print();
}
}