1. 定义装饰者模式
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
- 装饰者和被装饰对象有共同的超类型
- 你可以用一个或多个装饰者包装一个对象。
- 既然装饰者和被装饰对象有相同的类型,所以在任何需要原始对象(被包装)的场合,可以用装饰过的对象代替它。
- 装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,以达到特定的目的。
- 对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象。
2. 类图
3. 举例说明
在购买咖啡的时候,我们可以加入各种配料,例如:牛奶(milk)、摩卡(mocha)、奶泡(whip)
你加的东西不一样收取的费用就不一样。
这个时候你肯定会想,我们按照东西给钱就就好了。我要一杯咖啡+牛奶+摩卡 就给这三者相加的钱就好了。 实际生活中情况也是这个样子。
如果使用装饰着模式我们需要怎么做呢?
解决方式:
我们以饮料为主体(超类),然后在运行时以配料来装饰饮料。比方说顾客想要 摩卡(mocha) 和 奶泡(whip) 的浓咖啡(Espresso),那么,要做的是:拿一个浓咖啡(Espresso)对象,以摩卡(Mocha)对象装饰它,以奶泡(whip)对象装饰它.
根据上面类图,我们设计关于 咖啡-配料 的关系类图