设计模式-装饰者模式

     这一章看完之后,我感觉,装饰者模式就是对类继承的一种递归调用式的组合应用,很好的是实现了开闭原则,可以有效的扩展应用程序。比如书中的例子,有几种饮料,每种饮料的价格已经知道了,但是我们又有很多种的调料,每种调料也有它的价格,我们现在需要是在饮料中加调料,那么这样一来,饮料的售价就会变化,如何来描述这种售价呢?如果通过对调料种类的组合来定义若干的类,肯定是非常愚蠢的行为。

     通过装饰者模式,就能很好的解决这个问题,我们将这些类分为装饰类(调料),待装饰类(饮料)两种,这两种类继承同一个父类,不同的是装饰类中的构造函数有一个父类引用的构造函数,这样子就可以递归调用构造函数来进行 装饰了。

public class A extends BaseClass{
    
    public string who()
    {
        return "A";
    }

    public int cost()
    {
        return 5;
    }
}

我们定义一个待装饰类A,再定义几个装饰类:

public class decorator1 extends BaseClass{
    BaseClass baseClass;    
    public decorator1(BaseClass t)
    {
        this.baseClass = t;
    }
    public string who()
    {
        return baseClass.who()+",decoratro1";    
    }    
    public int cost()
    {
        return baseClass.cost()+10;
    }
}
public class decorator2 extends BaseClass{
    BaseClass baseClass;    
    public decorator2(BaseClass t)
    {
        this.baseClass = t;
    }
    public string who()
    {
        return baseClass.who()+",decoratro2";    
    }    
    public int cost()
    {
        return baseClass.cost()+20;
    }
}

然后我们在用decorator1 和decorator2 来装饰A的时候,就有了很犀利的调用方法:

A  a;
a=new decorator1(a);
a=new deocorator2(a);
system.out.println(a.who());
system.out.println(a.cost());

这样子 输出就是

A,decorator1,decorator2
35

实际的调用过程就是一个递归的过程。

装饰者模式的定义:

装饰者模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更具有弹性的替代方案

其中用到的设计原则:

开闭原则:对扩展开放,对修改关闭

posted on 2014-08-31 13:57  XtestW  阅读(241)  评论(0编辑  收藏  举报

导航