模板方法模式----你该找对象了(二)

上一篇小编叙述
模仿方法模式

模板方法模式----你该找对象了(一)

目录

1、概述

2、结构与分析

3、拓展

4、模式总结

3、拓展

钩子方法给子类留了“后门”可以通过在子类中实现的钩子方法对父类方法的执行进行约束,实现子类对父类行为的反向控制。(体现灵活性)

       上篇博客续集,情侣之间约约会,看看电影,喝喝咖啡,调情调情还是不错的。说到喝咖啡,这不来到星巴克咖啡店
,我们要了一杯咖啡,当漂亮的服务员问你:“先生,您是否要加调料?”你是呆呆地站在那……还是站在那……还是站在那……

为了使用钩子,我们在子类中覆盖它,在这里,钩子控制了咖啡饮料是否执行某部分算法,说得更明确些,就是饮料中是否要加进调料。

先看类图:

       说明:咖啡因饮料为抽象类,其中封装了一系列步骤方法,第一步:水煮沸(boilWater)、第二步:泡(brew)、第三步:放入杯子(pourInCup)、第四步:加调料(addCondiments),模板方法(prepareRecipe)中封装以上的步骤。

          在类图中咱需要注意的是
钩子方法(customerWantsCondiments),在下面的代码中,钩子方法的返回值的类型是boolean型,默认返回值为true,在子类中可以根据实际情况覆盖该方法,其中用于具体子类Coffee
代码决定是否要实现父类的方法。

在具体子类CaffeeWithhook中
覆盖了钩子方法
customerWantsCondiments(),返回false,表示客户无需添加任何调料。如果顾客“想要”调料,返回ture时,此时我们才调用addCodiments()方法。

客户端代码如下:

4、模式总结

模板方法应用于下列情况:

          ? 1
一次性实现一个算法的
不变的部分,并将可变的行为留给子类来实现。

          ? 2)基于继承的代码复用技术

          ? 3)控制子类扩展(钩子方法)。

金无足赤,人无完人。模板模式固然很好,但也存在一些缺点:

      
每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。(桥接模式相结合使用)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-25 21:18:01

模板方法模式----你该找对象了(二)的相关文章

模板方法模式----你该找对象了(一)

时间:2015年8月20日 事件:七夕,是牛郎织女鹊桥相会的日子,也是情侣想尽办法秀恩爱的日子.鲜花.美女.烛光晚餐.聚会K歌--这些七夕必备节目,让单身狗汪哭晕在厕所.此时单身的你是不是有些想法呢? 目录 1.概述 2.结构与分析 3.实例运用 4.模式总结 1.概述 接着七夕找对象说,如何保证尽快找到对象 (架构逻辑的正常执行),要确定先做什么,在做什么,最后得到我们想要的. 上有政策,下有对策 在追求妹纸时,一般都包含几个基本固定步骤: 认识妹纸 和妹纸成为朋友 将妹纸变成女朋友 假设这三

菜鸟译文(二)——使用Java泛型构造模板方法模式

如果你发现你有很多重复的代码,你可能会考虑用模板方法消除容易出错的重复代码.这里有一个例子:下面的两个类,完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件: 读取每一行并解析: 把每一行的字符填充到Product或Customer对象: 将每一个对象添加到Set里: 返回Set. 正如你看到的,只有有注释的地方是不一样的.其他所有步骤都是相同的. ProductCsvReader.java public class ProductCsvReader {       Set<

设计模式 ( 二十 ): Template method模板方法模式 -- 行为型

  1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1:银行业务办理流程在银行办理业务时,一般都包含几个基本固定步骤:取号排队->办理具体业务->对银行工作人员进行评分.取号取号排队和对银行工作人员进行评分业务逻辑是一样的.但是办理具体业务是个不相同的,具体业务可能取款.存款或者转账. 2.问题 如何保证架构逻辑的正常执行,而不被子类破坏 ? 3.

JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来聊聊final这个关键字 final可以修饰类,方法和变量 final修饰的类不可以被继承 final修饰的方法不可以被覆盖 final修饰的变量是一个常量,只能被赋值一次 内部类只能访问被final修饰的局部变量 final,故名思意,就是最终的意思,由以上的五种特性,不过final的出现,也是有

【大话设计模式】—— 模板方法模式

一.概念 上一篇文章刚刚讲了[大话设计模式]-- 原型模式,原型模式主要是通过Clone()方法,创建新的对象,免去了初始化的过程.模板方法模式也特别会"偷工减料",把不变的行为搬移到超类,去除子类中的重复代码,将代码的复用优势展现的淋漓尽致.它为我们提供了特定的结构和样式,我们只需关心填充数据内容就好,省心啊- 下面让我们来看一下它的准确定义: 模板方法(TemplateMethod)模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构

设计模式学习笔记(十八:模板方法模式)

1.1概述 定义了一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.这就是模板方法的定义. 类中的方法用以表明该类的实例所具有的行为,一个类可以有许多方法,而且类中的实例方法也可以调用该类中的其他若干个方法.在编写类的时候,可能需要将类的许多方法集成到一个实例方法中,即用一个实例方法封装若干个方法的调用,以表现一个算法的骨架,也就是说,调用该实例方法相当于按着一定顺序执行若干个方法. 例如,各类客运车站在安排乘客上车时都进行安全

JavaScript设计模式与开发实践 模板方法模式

一.模板方法模式的定义和组成 模板方法模式是一种只需使用继承就可以实现的非常简单的模式. 模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类.通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序.子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法. 二.第一个例子--Coffee or Tea 我们先来泡一杯咖啡,泡咖啡的步骤通常如下: 把水煮沸 用沸水冲泡咖啡 把咖啡倒进杯子 加糖和牛奶 var Coffee

Android 设计模式之模板方法模式

模板方法模式的定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 设计原则:别调用我们,我会调用你,(就好比猎头和求职者,求职者不需要去找猎头,猎头只要有工作就会找到你)称之为好莱坞原则 引用一个例子,一个店中有两饮料:咖啡和茶,他们的冲泡方法 第一步:都是要用沸水 第二步:用热水泡咖啡或茶 第三步:把饮料倒进杯子 第四步:在饮料中加入适当的调料 在上面的步骤中一.三是一样的,可以抽取出来放在基类中,二.四不一

模板方法模式和JDBCTemplate(一)

本篇博客的目录: 一:模板方法模式介绍 二:模板方法模式的简单实现 三:总结 一:模板方法模式的介绍 1.1:模板方法模式的定义 定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 这句话的意思就是我们先定义一套固定的规则标准,然后让不确定的方法设置为抽象的,等到具体的实现时候,让子类再去实现.先设置好一套规则,定义好一套业务流程,再去具体实现.这就是模板方法.这和我们现实生活的许多做法有很多异曲