标签:style blog color os div 问题 log sp new
这一章看完之后,我感觉,装饰者模式就是对类继承的一种递归调用式的组合应用,很好的是实现了开闭原则,可以有效的扩展应用程序。比如书中的例子,有几种饮料,每种饮料的价格已经知道了,但是我们又有很多种的调料,每种调料也有它的价格,我们现在需要是在饮料中加调料,那么这样一来,饮料的售价就会变化,如何来描述这种售价呢?如果通过对调料种类的组合来定义若干的类,肯定是非常愚蠢的行为。
通过装饰者模式,就能很好的解决这个问题,我们将这些类分为装饰类(调料),待装饰类(饮料)两种,这两种类继承同一个父类,不同的是装饰类中的构造函数有一个父类引用的构造函数,这样子就可以递归调用构造函数来进行 装饰了。
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
实际的调用过程就是一个递归的过程。
装饰者模式的定义:
装饰者模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更具有弹性的替代方案
其中用到的设计原则:
开闭原则:对扩展开放,对修改关闭
标签:style blog color os div 问题 log sp new
原文地址:http://www.cnblogs.com/xtestw/p/3947617.html