认识装饰者模式
好了, 我们已经了解利用继承无法完全解决问题, 在星巴兹遇到的问题有: 类数量爆炸、设计死板, 以及基类加入的新功能并不适用于所有的子类。
所以, 在这里要采用不一样的做法: 我们要以饮料为主体, 然后在运行时以调料来“ 装饰”(decorate) 饮料。比方说, 如果顾客想要摩卡和奶泡深焙咖啡, 那么, 要做的是:
拿一个深焙咖啡(DarkRoast)对象
以摩卡(Mocha)对象装饰它
以奶泡(Whip)对象装饰它
调用cost() 方法,并依赖委托(delegate)将调料的价钱加上去。
好了! 但是如何“ 装饰” 一个对象, 而“ 委托” 又要如何与此搭配使用呢? 给一个暗示: 把装饰者对象当成“ 包装者” 。让我们看看这是如何工作的……
| 回书目 上一节 下一节 |