漫说模板方法模式---学生时代的烦恼
1. 你过了吗?多么令人抓狂的四六级考试呀
有多少人曾经殚精竭虑?有多少人溯夜难眠?就是为了仅仅通过而已。
2. 考试之前,匆忙的需找这2B铅笔,考试之中的答题卡,多么熟悉的过程呀,
多么多的选择题,由我们来涂写,一次次的皱眉,只为胜利的那一刻。
你看,只有一套题目(其实分AB卷),一套答题纸(也分为AB),多么简单的流程呀,可是为什么我们的分数差别那么大呢??
4. 下面切入正题,我们的模板方法模式:
- Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
- 定义在一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要改变算法结构而重新定义特定的算法步骤。
4. 示例代码
类图
package com.programcreek.designpatterns.templatemethod;abstract public class Vehicle {//set to protected so that subclass can accessprotected boolean status;abstract void start();abstract void run();abstract void stop();public void testYourVehicle(){start();if(this.status){run();stop();} } }package com.programcreek.designpatterns.templatemethod;public class Car extends Vehicle {@Overridevoid start() {this.status = true;}@Overridevoid run() {System.out.println("Run fast!");}@Overridevoid stop() {System.out.println("Car stop!");} }package com.programcreek.designpatterns.templatemethod;public class Truck extends Vehicle {@Overridevoid start() {this.status = true;}@Overridevoid run() {System.out.println("Run slowly!");}@Overridevoid stop() {System.out.println("Truck stop!");} }import com.programcreek.designpatterns.templatemethod.Car; import com.programcreek.designpatterns.templatemethod.Truck; import com.programcreek.designpatterns.templatemethod.Vehicle;public class Main {public static void main(String args[]){Car car = new Car();testVehicle(car);Truck truck = new Truck();testVehicle(truck);}public static void testVehicle(Vehicle v){v.testYourVehicle();} }
5. 应用场景
1. 多个子类有公共方法,并且逻辑基本相同
2. 对复杂的算法,核心算法设计为模板方法,细节功能则由各个子类实现
3. 重构代码
6.扩展
1.在spring中的应用spring jdbc
Spring主要提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程
Spring提供了3个模板类:
- JdbcTemplate:Spring里最基本的JDBC模板,利用JDBC和简单的索引参数查询提供对数据库的简单访问。
- NamedParameterJdbcTemplate:能够在执行查询时把值绑定到SQL里的命名参数,而不是使用索引参数。
- SimpleJdbcTemplate:利用Java 5的特性,比如自动装箱、通用(generic)和可变参数列表来简化JDBC模板的使用
2. 在jdk中的应用
- 非抽象方法
java.io.InputStream
,java.io.OutputStream
,java.io.Reader
和java.io.Writer
. - 非抽象方法
java.util.AbstractList
,java.util.AbstractSet
andjava.util.AbstractMap
. javax.servlet.http.HttpServlet
, 所有doXXX()
默认发送一个 HTTP 405 "不允许的方法" 错误作为响应.你可以改写或者默认.
reference:
http://www.programcreek.com/2012/08/java-design-pattern-template-method/
http://en.wikipedia.org/wiki/Template_method_pattern
http://book.51cto.com/art/201202/318456.htm
http://my.oschina.net/u/1470003/blog/224031
http://my.oschina.net/aps/blog/85981
http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns
注:以上图片来自于互联网,不一一注明了。
转载于:https://www.cnblogs.com/davidwang456/p/3678106.html
漫说模板方法模式---学生时代的烦恼相关推荐
- Java设计模式之行为型:模板方法模式
一.什么是模板方法模式: 模板方法是基于继承实现的,在抽象父类中声明一个模板方法,并在模板方法中定义算法的执行步骤(即算法骨架).在模板方法模式中,可以将子类共性的部分放在父类中实现,而特性的部分延迟 ...
- 继承的概念和实现 、 super关键字 、 Object常见方法、抽象类、接口、模板方法模式、成员内部类、匿名内部类
这篇博客将会涉及到: 继承的概念和实现 super关键字 方法重写-Override Object常见方法 继承的概念: 生活中,继承的概念随处可见,继承需要符合的关系:is-a:父类更通用.子类更特 ...
- java view template_Java设计模式之模板方法模式(Template Method)
本文继续介绍23种设计模式系列之模板方法模式. 概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子 ...
- C++设计模式之Template Method(模板方法模式)
模板方法模式总结起来就是灵活运用C++的多态性,灵活运用普通函数,虚函数,纯虚函数的组合, 打个比方,每个人每天的生活都不一样,老师要上课,学生要学习,程序员要编程,但是每个人都需要吃饭与休息,这样我 ...
- 设计模式之模板方法模式(Template Method Pattern)
模式的定义与特点 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤.它 ...
- 设计模式-原型模式与模板方法模式的对比总结
前言: 前面几个设计模式几乎都是以代码的形式进行汇总,和解析具体的流程.这节原型模式和模板方法模式大致上我觉得是有很多相似的地方,所以就来总结下,那些地方相同.那些地方不同! 对比: 相同点: 1,都 ...
- 大话设计模式(8)模板方法模式
一.场景及UML图 场景:有点类似于原型模式,不过侧重点不一样.模板方法重点是体现在代码复用.把一些重复性的机制代码全部抽离到父类. 二.概念 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延 ...
- TemplateMethod模板方法模式之应用
一,定义:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 二,类图: 三,通过小例子讲解: 这个模式一般用在 ...
- 模板方法模式实现组合查询
1.前提 1.模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 2.组合方法 之前写过一篇博客,讲述实现任意 ...
最新文章
- 我们期待的TensorFlow 2.0还有哪些变化?
- angularjs-ngModel 控制页面的宽度
- C语言如何实现随机打印24个母,菜鸟求助,写一个随机输出26个英文字母的程序...
- 如何导出SAP的数据表字段和字段描述
- JavaScript 32位整型无符号操作
- python怎么显示汉字_mac在matplotlib中显示中文的操作方法
- JavaScrip入门-变量计算%函数
- 计算机操作基本知识公务员,公务员计算机类操作系统知识.pdf
- subplot()函数--Matplotlib
- java实训说明说需求分析_java实训总结收获
- UDP聊天室(代码)
- 好用的BUG、内存泄露捕捉工具 EurekaLog v6.0.3 Enterprise For D5-D2007
- jieba库:Tokenizer()类详解:(五)tokenize分词
- python的基本文本处理操作
- 响应时间与滤波器截止频率的关系
- vue直传图片到阿里云OSS(单张直接上传)
- 做Android开发摸鱼是要付出代价的,被主管劝退,我后悔了!
- 分组、分类(分组汇总)
- 扬帆际海—shopee跨境店和本土店谁更有优势?
- 抓取chrome所有版本密码
热门文章
- java定时任务_定时任务最简单的3种实现方法(超好用)
- excel二极管伏安特性曲线_晶体二极管的识别与检测方法图解
- php人员排班程序,人员排班软件操作步骤
- 表格某一列不固定其余全固定_如何利用Python一键拆分表格并进行邮件发送~
- 可编程led灯带原理_88张图搞定层板灯带的设计、安装、收口及检修!
- php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)
- Qt中的QLabel组件
- Oracle的新建序列sequence
- r语言向量代码如何创建函数c,R中向量基本操作:创建、运算、访问
- neo4j删除所有节点