- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 } 钩子方法 重写钩子方法 ①可以通过在抽象模板定义模板方法给出成熟的算法步骤
您可能关注的文档
- 反射实现 AOP 动态代理模式(Spring AOP 实现原理).pdf
- 蓝牙4.0串口模块讲述.pdf
- 计算机复习资料 试卷答案要领.doc
- 第九章 电梯服务系统仿真设计.pdf
- 第十一节 多彩的物质世界.doc
- 第三章 体育运动卫生及医务监督.doc
- 怎样解决win7 IPv4无internet访问权限.doc
- 情境3项目数据库对象与数据的操作7-触发器.doc
- 怎样将条码下的数字嵌入到条码中.docx
- 设备润滑图表详解.doc
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)