码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-06-03 03:01:42      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:设计模式


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

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

bubuko.com,布布扣


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

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

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的操作



设计模式---装饰者模式(学习笔记),布布扣,bubuko.com

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

标签:设计模式

原文地址:http://blog.csdn.net/zouchengxufei/article/details/24096309

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!