Head First--设计模式(装饰者模式)

本文通过星巴兹咖啡店管理系统的实例介绍了如何运用装饰者模式来动态扩展对象的功能,避免类爆炸的问题,使得咖啡种类及其修饰者的添加更加灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  从现在开始,我将以写一个小软件的方式来进行模式识别的学习,包含需求分析,功能模块设计,原理图设计,程序实现这个几个部分,可能具体的模式模块不可能都包括在内。

    需求分析:星巴兹咖啡店已经遍布全世界的很多对方,我们需要写个软件对它的咖啡店进行管理,主要是客户需要咖啡种类的管理,例如,我想要一个奶油咖啡,另一个人可能需要一个摩卡咖啡,所有,咖啡的种类会有很多,也就是可以理解为,咖啡加上它的修饰者,会产生很多的咖啡种类。并且,咖啡的不同的修饰者的添加数目不定,相同的修饰者添加数目也不定。所以,如果使用类继承,会产生类爆炸的情况,我们将使用装饰者模式进行设计。

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

  需要说明几点:

  1.装饰者和被装饰者对象有相同的超类型

  2.你可以用一个或多个装饰者包装一个对象

  3.既然装饰者和被装饰者对象有相同的超类型,所以在任何需要原始对象(被包装)的场合可以用装饰过的对象代替它

  4.装饰者可以在所委托被装饰者的行为之前与/或之后加上自己的行为,以达到特定的目的。

  原理图设计:

对上面的设计图,我觉有几点需要注意:

  1.这里利用几次达到“类型匹配”,而不是利用继承类获得“行为”(虽然也也得到了cost和getDescrption行为,但这不是主要的目的)

  2.使用对象组合,可以把所有饮料和调料更有弹性地加以混合与匹配。

下面是程序设计和实现:(这个部分我们将以源程序的形式实现)

 StarbuzzCoffee.rar

转载于:https://www.cnblogs.com/lufangtao/archive/2012/04/21/2461661.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值