星巴兹咖啡和茶冲泡法分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
星巴兹咖啡和茶冲泡法分析

模板方法模式 第十三章 模板方法模式 第十三章 模板方法模式 * 模版方法模式是最为常见的几个模式之一,模版方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。 继承常常作为功能复用的主要工具,这时继承有被滥用的危险。所以,我们有一个设计原则:多用组合,少用继承! 是不是继承就根本不该使用呢?事实上对数据的抽象、继承、封装和多态是面向对象语言的最重要的特性。继承不应当被滥用,井不意味着继承根本就不该使用。在GoF书中,绝大多数模式是将依赖于继承的实现转换为基于对象的组合和聚合来实现的。模板方法模式是很少用继承来实现的模式中的一个!而且模版方法模式:鼓励恰当地使用继承。此模式可以用来改写一些拥有相同功能的相关的类,将可复用的一般性的行为代码移到基类里面,而把特殊化的行为代码移到子类里面。熟悉模版方法模式便成为一个重新学习继承的好地方。 咖啡因饮料 茶和咖啡都是咖啡因饮料,它们的冲泡方法也很相似: 星巴兹咖啡冲泡法 星巴兹茶冲泡法 ⑴ 把水煮沸 ⑴ 把水煮沸 ⑵ 用沸水冲泡咖啡 ⑵ 用沸水浸泡茶叶 ⑶ 把咖啡倒进杯子 ⑶ 把茶倒进杯子 ⑷ 加糖和牛奶 ⑷ 加柠檬 咖啡和茶的冲泡方法大致上一样。 创建咖啡 public class Coffee { void prepareRecipe() { boilWater(); brewCoffeeGrinds(); pourInCup(); addSugarAndMilk(); } public void boilWater() { System.out.println(Boiling water); } public void brewCoffeeGrinds() { System.out.println(Dripping Coffee through filter); } public void pourInCup() { System.out.println(Pouring into cup); } public void addSugarAndMilk() { System.out.println(Adding Sugar and Milk); } 每个方法都实现算法中的一个步骤:煮沸水、冲泡咖啡、把咖啡倒进杯子、加糖和牛奶。 创建茶 public class Tea { void prepareRecipe() { boilWater(); steepTeaBag(); pourInCup(); addLemon(); } public void boilWater() { System.out.println(Boiling water); } public void steepTeaBag() { System.out.println(Steeping the tea); } public void addLemon() { System.out.println(Adding Lemon); } public void pourInCup() { System.out.println(Pouring into cup); } 泡茶专有的两个方法。 第二步和第四步与咖啡的实现不同,其它的实现一样。 第一版设计 能否改进这个设计? 星巴兹咖啡和茶冲泡法分析 星巴兹咖啡和茶的冲泡法采用了相同的算法: ① 把水煮沸 ② 用热水泡咖啡或茶 ③ 把饮料倒进杯子 ④ 在饮料内加入适当的调料 第一步和第三步完全相同已经被抽出来,放到基类了。 第二步和第四步的抽象也是相同的。 抽象prepareRecipe() ① 我们遇到的第一个问题就是:茶使用steepTeaBag()和 addLemon()方法,而咖啡使用brewCoffeeGrinds() 和addSugarAndMilk()方法。 咖啡 茶 void prepareRecipe() { void prepareRecipe() { boilWater(); boilWater(); brewCoffeeGrinds()

文档评论(0)

wangyueyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档