设计模式之装饰者模式
首先让我们看一下装饰者模式(我爱叫他套娃模式)的概念:动态的将责任附加到对象上, 若要扩展功能,装饰者 提供了比继承者更有弹性的集成方案。 什么?没看懂?没关系,最后再来看这个概念,想让让我们来看一个咖啡屋项目(就是点各式 各样的咖啡)。 原本的设计如下: 看似很好的设计,但是别忘了,买咖啡时候我们会让他们给我们加一系列的调料,例如蒸奶、 摩卡......。所以,在这时咖啡店的设计就变成了,如下: 不错,你看到了 类爆炸 ! 好啦,现在有对这个系统做出了改进,如下: 好啦,现在这个设计相比之前的的确好了许多,但是如果我们要修改配料呢?那么就必须修改 超类,这时候就违反了一条 设计原则:类应该对扩展开放,对修改关闭 ! 所以这个时候,装饰者模式单诞生了!!!!! 来看个例子: 如果顾客现在要一杯摩卡和奶泡深培咖啡。那么,要做的是: ①拿一个深培咖啡(DarkRoast)对象 ②以摩卡(Mocha)对象装饰它 ③以奶泡(Whip)装饰它 ④调用cost()方法,并依赖委托(delegate)将调料的几千加上去 如何工作? ①以DarkRoast对象开始 ②顾客想要摩卡(Mocha),所以建立一个Mocha对象,并用它将DarkRoast对象包起来 ③顾客也想要奶泡(Whip),所以建立一个Whip装饰者,并用它将Mocha对象包起来。别 忘了,DarkRoast继承自Beverage