频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

欢迎来到星巴兹咖啡

作者: [美] 弗里曼(Freeman , E.)等著 蔡学镛 译 出处:中国电力出版社  2007-12-04 13:18    砖    好    评论   进入论坛
阅读提示:《Head First 设计模式(中文版)》第三章介绍了Decorator设计模式,可以称为“给爱用继承的人一个全新的设计眼界”。本文是欢迎来到星巴兹咖啡。

欢迎来到星巴兹咖啡
星巴兹(Starbuzz) 是以扩张速度最快而闻名的咖啡连锁店。如果你在街角看到它的店, 在对面街上肯定还会看到另一家。因为扩张速度实在太快了, 他们准备更新订单系统, 以合乎他们的饮料供应要求。

他们原先的类设计是这样的……

购买咖啡时, 也可以要求在其中加入各种调料, 例如: 蒸奶(Steamed Milk) 、豆浆(Soy) 、摩卡(Mocha, 也就是巧克力风味) 或覆盖奶泡。星巴兹会根据所加入的调料收取不同的费用。所以订单系统必须考虑到这些调料部分。
这是他们的第一个尝试……

 
  

   

 

请为下面类的cost()方法书写代码( 用伪Java 代码即可) 。

public class Beverage { public class DarkRoast extends Beverage { public double cost() { 
public DarkRoast() {
description = “Most Excellent Dark Roast”; }
public double cost() {
}} }}

当哪些需求或因素改变时会影响这个设计?

调料价钱的改变会使我们更改现有代码。

一旦出现新的调料,我们就需要加上新的方法,并改变超类中的cost()方法。

以后可能会开发出新饮料。对这些饮料而言(例如:冰茶),某些调料可能并不适合,但是在这个设计方式中,Tea(茶)子类仍将继承那些不适合的方法,例如:hasWhip()(加奶泡)。

这是很糟糕的!我们在第1章就得到了这个教训。

万一顾客想要双倍摩卡咖啡,怎么办?

轮到你了:

大师与门徒……

大师: 我说蚱蜢呀! 距离我们上次见面已经有些时日, 你对于继承的冥想, 可有精进?

门徒: 是的, 大师。尽管继承威力强大, 但是我体会到它并不总是能够实现最有弹性和最好维护的设计。

大师: 啊! 是的, 看来你已经有所长进。那么, 告诉我, 我的门徒, 不通过继承又能如何达到复用呢?

门徒: 大师, 我已经了解到利用组合(composition) 和委托(delegation) 可以在运行时具有继承行为的效果。

大师: 好, 好, 继续……

门徒: 利用继承设计子类的行为, 是在编译时静态决定的, 而且所有的子类都会继承到相同的行为。然而, 如果能够利用组合的做法扩展对象的行为, 就可以在运行时动态地进行扩展。

大师: 很好, 蚱蜢, 你已经开始看到组合的威力了。

门徒: 是的, 我可以利用此技巧把多个新职责, 甚至是设计超类时还没有想到的职责加在对象上。而且, 可以不用修改原来的代码。

大师: 利用组合维护代码, 你认为效果如何?

门徒: 这正是我要说的。通过动态地组合对象, 可以写新的代码添加新功能, 而无须修改现有代码。既然没有改变现有代码, 那么引进bug 或产生意外副作用的机会将大幅度减少。

大师: 非常好。蚱蜢, 今天的谈话就到这里。希望你能在这个主题上更深入……

牢记, 代码应该如同晚霞中的莲花一样地关闭( 免于改变), 如同晨曦中的莲花一样地开放( 能够扩展) 。

【责任编辑:雪花 TEL:(010)68476606】

回书目   上一节   下一节
专题
J2EE实用技巧大全
Windows Server 2003技巧和应用
ADO.NET实用技巧专题
杀毒软件优化和使用技巧
Windows系统使用技巧
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
浏览器的战国时代
浏览器的战国时代
ARP攻击防范与解决方案
ARP攻击防范与解决方案
NAC安全访问控制
NAC安全访问控制
· NAC安全访问控制
· 网络布线测试仪器
· Windows Server 2008专..
· Windows远程桌面应用
· 网络故障排除宝典
· 运营商封堵ADSL共享 中..
· 解析35岁技术人的价值..
· 世纪枭雄比尔盖茨的王..
· 主流品牌防火墙配置
· ASP.NET开发教程
· 超级计算机TOP500专题
· Vista SP1对决XP SP3
· SQL Server 2008/2005..
· 程序员如何成长?
· C#技术开发指南
· 虚拟化技术还有点“虚”
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Windows远程桌面应用
· C#技术开发指南
· Apache技术专题
· Windows集群服务应用
· C#技术开发指南
· 国际文档格式标准开战
· 路由器设置与口令恢复
· Linux 集群技术专题
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· C#技术开发指南
· 三层交换技术专题
· Apache技术专题
· C#技术开发指南
· Windows远程桌面应用
· 企业数据恢复指南
· Windows集群服务应用
· 路由器设置与口令恢复
· Linux 集群技术专题
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用