public interface Component{
void method();
}
publicclassConcreteComponent implements Component{
publicvoid method(){
System.out.println("原来的方法");
}
}
public abstract classDecorator implements Component{
protectedComponent component;
publicDecorator(Component component){
super();
this.component = component;
}
publicvoid method(){
component.method();
}
}
publicclassConcreteDecoratorA extends Decorator{
publicConcreteDecoratorA(Component component){
super(component);
}
publicvoid methodA(){
System.out.println("被装饰器A扩展的功能");
}
publicvoid method(){
System.out.println("针对该方法加一层A包装");
super.method();
System.out.println("A包装结束");
}
}
publicclassConcreteDecoratorB extends Decorator{
publicConcreteDecoratorB(Component component){
super(component);
}
publicvoid methodB(){
System.out.println("被装饰器B扩展的功能");
}
publicvoid method(){
System.out.println("针对该方法加一层B包装");
super.method();
System.out.println("B包装结束");
}
}
publicclassMain{
publicstaticvoid main(String[] args){
Component component =newConcreteComponent(); //原来的对象
component.method(); //原来的方法
ConcreteDecoratorA concreteDecoratorA =newConcreteDecoratorA(component); //装饰成A
concreteDecoratorA.method(); //原来的方法
concreteDecoratorA.methodA(); //装饰成A以后新增的方法
ConcreteDecoratorB concreteDecoratorB =newConcreteDecoratorB(concreteDecoratorA);//装饰成A以后再装饰成B
concreteDecoratorB.method(); //原来的方法
concreteDecoratorB.methodB(); //装饰成B以后新增的方法
}
}
原文:http://www.cnblogs.com/Doing-what-I-love/p/5621177.html