第6节 模板方法模式.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 模板方法模式 回顾 掌握适配器模式,当需要使用一个现有的类而其接口并不符合需要时 掌握适配器模式的结构与使用 学会使用双向适配器,单接口适配器 掌握外观模式以及与适配器模式比较 利用模式和原则设计简单应用程序 目标 模板方法定义了算法的步骤,把这些步骤的实现延迟到子类 模板方法模式为我们提供一种代码复用的重要技巧 模板方法的抽象类可以定义具体方法、抽象方法和Hook Hook是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。 举例 Starbucks咖啡和茶冲泡方法 怎样解决-1 解决2 认识模板方法 运行 定义模板方法模式 定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使的子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模式的结构:包括两种角色 ①抽象模板:是一个抽象类,它包含了一个算法骨架称为模板方法;该算法中每一步骤可以由抽象方法(原语操作)与非抽象方法实现。抽象方法由其子类完成。 ②具体模板:它是抽象模板的子类,实现抽象模板中的原语操作 对模板方法进行挂钩 Hook方法:钩子是一种被声明在抽象类中的具体方法,但只有空的或默认的实现。钩子的存在可以让子类有能力对算法的不同点进行挂钩。要不要挂钩,由子类自行决定要不要覆盖Hook。 举例 根据顾客要求,其饮料是否要添加进调料 运行 模板方法模式 特点 适用 当你的子类必须提供算法中某个方法或步骤的实现时,就使用抽象方法。如果算法的这个部分是可选的,就用钩子。 用模板方法排序 利用数组的排序模板方法将一组Duck数组按照重量排序 代码 运行 利用Hook写Swing窗口程序 运行 注意 为防止子类改变模板方法中的算法,可以将模板方法声明为final。 将决策权放在高层模块中,以便决定如何以及何时调用低层模块。 工厂方法是模板方法的一种特殊版本。 总结 模板方法定义了算法的步骤,把这些步骤的实现延迟到子类 模板方法模式为我们提供一种代码复用的重要技巧 模板方法的抽象类可以定义具体方法、抽象方法和Hook Hook是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。 设计模式 设计模式 咖啡冲泡法: ⑴把水煮沸 ⑵用沸水冲泡咖啡 ⑶把咖啡倒进杯子 ⑷加糖和牛奶 茶冲泡法: ⑴把水煮沸 ⑵用沸水冲泡茶叶 ⑶把茶叶倒进杯子 ⑷加柠檬 咖啡和茶的冲泡方法大致上一样。 我们将共同的部分抽取出来,放进 一个基类中。 ①把水煮沸 ②用沸水冲泡饮料(咖啡或茶) ③把饮料(咖啡或茶)倒进杯子 ④在饮料(咖啡或茶)内加入适当 的调料 该方法用来处理咖啡和茶。其被声明为final,因为 不希望子类覆盖这个方法。 因为咖啡和叉处理这两个做法不同,所以这两个方法被声明为 抽象,留给子类去具体实现。 这两个子类继承 自CaffeineBeverage: 将一些步骤依赖子类进行 这就是模板方法,因为: ①它是一个方法; ②它用作一个算法的模板; ③在这个模板中,算法内的每一个步骤都 被一个方法代表了; ④某些方法由子类来处理; ⑤需要由子类提供的方法,必须在超类中声明 为抽象 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现! 特点: ①由CaffeineBeverage类主导 一切,它拥有算法,而且保护 这个算法; ②对子类来说,CaffeineBeverage 类的存在,可以将代码的复用最大化; ③算法只存在于一个地方,所以容易 修改; ④这个模板方法提供一个框架,可以让 其它相同冲泡法的饮料插进来,只需实现 自己的方法就可以了; ⑤CaffineBeverage 类专注算法本身,由子类 提供完整的实现。 AbstractTemplate templateMethod():void primitiveOperation1():void primitiveOperation2():void ConcreteTemplate1 primitiveOperation1():void primitiveOperation2():void ConcreteTemplate2 primitiveOperation1():void primitiveOperation2():void void templateMethod() { primitiveOperation1():void primitiveOperation2():void } 钩子方法 重写钩子方法 ①可以通过在抽象模板定义模板方法给出成熟的算法步骤

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档