本文共 2177 字,大约阅读时间需要 7 分钟。
动态的给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
应用在系统需要新的功能的时候。
package clt.decorator.ordinary;//对象接口,可以为这些类动态添加职责public abstract class Component { public abstract void Operation();}
package clt.decorator.ordinary;//具体要装饰的对象public class ConcreteComponent extends Component { @Override public vaoid Operation() { System.out.println("这是具体要装饰的对象"); }}
package clt.decorator.ordinary;public class Decorator extends Component{ protected Component component; public void setComponent(Component component) { this.component = component; } @Override public void Operation() { if(component!=null){ //有具体的要装饰的对象,执行要装饰对象的核心职责 component.Operation(); } }}
package clt.decorator.ordinary;//具体要装饰的对象public class ConcreteComponent extends Component { @Override public void Operation() { System.out.println("这是具体要装饰的对象"); }}
package clt.decorator.ordinary;public class ConcreteDecoratorB extends Decorator{ private String addstateB; //本类独有的功能,用于装饰对象 @Override public void Operation() { super.Operation(); //首先运行核心职责 addstateB="装饰类B给对象添加装饰"; //再执行要装饰的功能 System.out.println("装饰类B给具体对象进行了进行了装饰"); }}
package clt.decorator.ordinary;public class Client { public static void main(String[] args) { //声明对象 ConcreteComponent cc=new ConcreteComponent(); //具体要装饰的对象 ConcreteDeractorA da=new ConcreteDeractorA(); //装饰类A ConcreteDecoratorB db=new ConcreteDecoratorB(); //装饰类B //开始装饰 先用da装饰cc,再用db在最外层装饰da da.setComponent(cc); db.setComponent(da); db.Operation(); }}
这是具体要装饰的对象装饰类A给具体对象进行了进行了装饰装饰类B给具体对象进行了进行了装饰
转载地址:http://esfdi.baihongyu.com/