设计模式--6.装饰模式

来源:互联网 发布:高达最强ma 知乎 编辑:程序博客网 时间:2024/06/11 01:24
装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活。
结构图:

代码实现:
抽象类:
package unit1to6.test6;package unit1to6.test6;public abstract class Component {public abstract void Operation();}
具体类:
package unit1to6.test6;public class ConcreteCompent  extends Component{@Overridepublic void Operation() {System.out.println("具体对象的操作");}}
抽象装饰类:
package unit1to6.test6;public class Decorator extends Component{protected Component component;public void setComponent(Component component){this.component=component;}@Overridepublic void Operation() {if(component!=null){component.Operation();}}}
具体装饰类:
package unit1to6.test6;public class ConcreteDecoratorA  extends Decorator{private String addedState;public void Operation(){super.Operation();addedState="New State";System.out.println("具体装饰对象A的操作");}}

具体装饰类2:
package unit1to6.test6;public class ConcreteDecoratorB  extends Decorator{public void Operation(){super.Operation();AddedBehavior();System.out.println("具体装饰对象B的操作");}private void AddedBehavior(){System.out.println("装饰对象B的特有操作");}}
客户端类:
package unit1to6.test6;public class mainTest {/* 装饰者模式 * 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更加灵活。 * c,d1,d2有共同的父类 * Decorator中有共同父类的对象,顾new 一个c,可以用来初始化d1,d2 *  * 功能: * 为已有功能动态的添加更多功能的一种方式。 * 使用场景:一个阶段需要的功能,需要执行顺序,执行个数有变话的功能。 * */public static void main(String[] args) {ConcreteCompent c=new ConcreteCompent();ConcreteDecoratorA d1=new ConcreteDecoratorA();ConcreteDecoratorB d2=new ConcreteDecoratorB();d1.setComponent(c);//告诉需要装饰的对象d2.setComponent(d1);d2.Operation();}}














0 0
原创粉丝点击