设计模式学习:装饰者模式2016-02-27装饰者(Decorator)模式又叫包装模式,用组合的方式来拓展对象的功能,是继承关系的一个替代方案。
定义说明:装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰着提供了比继承更富有弹性的替代方案。
从实例中体会:实例来自 HeadFirst一书(建议读该书,例子太赞了),是星巴克的例子。星巴克的咖啡很有名(穷学生,现在喝不起o(╯□╰)o)。他们供应很多种类的咖啡。一开始他们的类设计是下面这样的。

但是因为购买咖啡的时候,会加入更重调料,比如:蒸奶(Steamed Milk),豆浆(Soy),摩卡(Mocha,也就是巧克力风味的),或者覆盖奶泡。星巴克会针对不同的调料收取不一样的费用。所以订单系统必须考虑这些。想想,一开始我们遇到这种问题会怎么做,让每个特别的咖啡豆+调料都自成一个类,似乎可以解决问题,但是,如果调料很多,咖啡豆种类不少的话,总的类的数量=咖啡豆种类*调料数量。其实挺多类的。这样是不行的。 那怎么办,在Beverage本身下手?设计成下面这样的结构?

学了开闭原则(忘了可以看这里),我们明白,这种做法违法了开闭原则,还有一点,还记得组合复用原则么?优先使用组合而不是继承,这里,应该优先考虑组合。在这里使用装饰者模式来解决。它是这样的,最先开始,我们选择咖啡豆种类,这里选择种类1
