设计模式之装饰者模式

首先提出问题:如何计算在星巴克购买咖啡时,加入各种调料的总费用。

第一种方案如下:


这种方案在一定程度上可以解决类爆炸的问题。但是有引来了新的问题,我们可能会修改调料的价格,或者有了新的调料,在或者某些子类中不包含某些调料。这都会导致我们修改原代码。这与我们的设计原则不符。

我们在提出一条设计原则:

设计原则:类应该对扩展开放,对修改关闭。


第二个方案:

以DarkRoast为例,顾客想要摩卡,就建立一个摩卡对象,并用它将DarkRoast对象包起来。顾客想要奶泡,就建立奶泡对象将摩卡包起来。如图:


然后结算的时候,就可以通过外围的装饰者的cost结算,奶泡的cost会先委托它装饰的对象摩卡计算,最后加上奶泡的价格。

我们可以画出类图:


对应上面的类图,我们可以画出装饰者模式的类图:


这就是装饰者模式:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值