设计模式(三)装饰者模式

装饰者模式的应用实例 - 咖啡馆

星巴克咖啡馆想要一份菜单系统,要求能够计算不同种类咖啡加上不同调料(牛奶、豆浆、摩卡、奶泡。。。)的价格。Tom做了如下实现:

每个咖啡都要继承这个饮料类,然后对是否有各种调料进行配置,然后实现cost()方法。这样基本解决了这个问题,但是如果现在又增加了几种饮料,是不是需要更改现在的代码呢?如何才能不对以前代码做修改的基础上实现不同饮料的变化呢?

装饰者模式的定义

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

定义装饰者模式:类图

现在我们就DarkRoast咖啡为对象(被装饰者),而采用Mocha和Whip装饰它。

咖啡馆的设计模型

注意:对象和装饰者必须保证具有同一种超类型,用于实现相互包含,在任何需要原始对象(即被包装对象的时候可以用已包装过的对象代替它)。这样,对象可以在任何时候被装饰,可以动态、不限量的修改装饰。

原文地址:https://www.cnblogs.com/torresliang/p/4331284.html