设计模式---装饰者模式(学习笔记)

来源:互联网 发布:linux dhcp client 编辑:程序博客网 时间:2024/05/01 16:07

首先看装饰者模式的定义动态的将责任附加到对象上。若要扩展功 能,装饰者提供了比继承更有弹性的替代方案!

先看看《大话设计模式》给出的类图:


实际上,装饰者模式就是:把装饰者对象当成“包装者”,换言之,把要装饰的对象作为参数传递到装饰对象里去,然后进行操作。(如果理解不对,希望给指正),下面看代码来理解这个类图:

这是装饰者和需要装饰的具体对象共同的接口:

public abstract  class Component {    abstract void Operation();}
具体对象
public class ConcreteComponment extends Component {    @Override    void Operation() {      System.out.println("具体对象的操作");    }}
装饰着基类
public class Decorator extends Component {    private Component component;    public void setComponent(Component component) {        this.component = component;    }    @Override    void Operation() {    if (component!=null){        component.Operation();    }    }}
装饰者A
public class ConcreateDecoratorA extends Decorator {    private String addState;    @Override    void Operation() {        super.Operation();        addState="New state";        System.out.println("ConcreateDecoratorA的操作");    }}
装饰者B
public class ConcreateDecoratorB extends  Decorator {    @Override    void Operation() {        AddedBehavior();        super.Operation();/**<pre name="code" class="java"><p><span style="font-size:14px;"><em></em></span></p><span style="font-size:14px;"><em>装饰者可以在所委托被装饰者的行为之前与 / 或之后,加上自己的行为,以达到特定的目的。</em></span>

**/ System.out.println("ConcreateDecoratorB的操作"); } public void AddedBehavior(){ System.out.println("AddedBehavior"); }}

测试类:
public class Main {    public static void main(String[] args){ConcreteComponment con=new ConcreteComponment();        ConcreateDecoratorA a=new ConcreateDecoratorA();        a.setComponent(con);        a.Operation();        ConcreateDecoratorB b=new ConcreateDecoratorB();        b.setComponent(con);        b.Operation();    }}

测试结果:

具体对象的操作ConcreateDecoratorA的操作AddedBehavior具体对象的操作ConcreateDecoratorB的操作



0 0
原创粉丝点击