开篇序言:四人帮的设计模式对于我这个菜鸟看着打瞌睡,后面果断买了一本head first的,感觉还可以像看报纸似的,花了一个寒假的晚上看了大半,确实内容也挺吸引人的,讲的很风趣。否则我也不可能,大过年的小伙伴们还在外面耍,自己还在那里装B。可是看完的困惑也随之而来,我怎么才能熟练的操练这些模式呢!书上讲的头头是道,可是实际中我们确不知道怎么运用!后面看到别人牛逼的都是随便一个模式都能脱口面而出,还有就是实际项目接触多了,肯定也有一定的职业嗅觉!所以希望自己也能够通过写博客,让自己对设计模式有一个更深层次的认识,中间肯定会有很多不足甚至是错误的,欢迎大家指出,我们互相学习、交流!

申明:模板模式应该是用的比较多的一个模式。记得PM还在给我们讲业务时,我们的技术大牛直接来一句不就是”模板模式“嘛!当时我就想:呀,得回去复习下模板模式讲的是嘛东西了!于是就有了下面这篇文章

一、定义和类图

  在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

说明:抽象模板类的模板方法templateMethod分别调用abstractMethod1()、abstractMethod2().完成整个业务逻辑。而对于不同子类可以可以根据自己的的需求而重写这两个方法达到自己的要求。

二、实例(代码是有错的,这里只提供一个思想)

业务要求:对多个dat文件,分别作成csv文件,接着导入到数据库中。

抽象模板类UpdateMasterTableTask

package design.a.template;

public abstract class UpdateMasterTableTask {
//这是个模板方法
public void run(){
readMasterDataFileWriteToTempDataFile();
updateMasterTableTask();
backUpDirFile();
} //将dat文件写成临时目录下的cvs文件
protected abstract void readMasterDataFileWriteToTempDataFile(); //把csv文件更新到数据库中,先删除表中的数据,然后再更新到数据库中
private void updateMasterTableTask(){
deleteMasterTableData();
insertMasterTableData();
} //备份dat文件到指定位置中
private void backUpDirFile(){
/**
* 此外省略几千字
*/
} //删除表中的数据
private void deleteMasterTableData(){
/**
* 此外省略几千字
*/
} //把数据更新到数据库
private void insertMasterTableData(){
/**
* 此外省略几千字
*/
} }

具体模板类1UpdateStuMasterTableTask

package design.a.template;

import java.io.BufferedReader;
import java.io.IOException; public class UpdateStuMasterTableTask extends UpdateMasterTableTask{ @Override
protected void readMasterDataFileWriteToTempDataFile() {
BufferedReader bufferedReader = null;
//得到一行数据
String line = bufferedReader.readLine();
//此时如果dat文件内空是以,为分隔符的话,对应处理为
String[] split = line.split(",");
writeToTempCsvFile(csvWriter, split);
} //写入到csv中去
private void writeToTempCsvFile(CsvWriter csvWriter,
String split){
/**
* 此外省略几千字
*/
}
}

具体模板类2UpdateTeacMasterTableTask

package design.a.template;

import java.io.BufferedReader;

public class UpdateTeacMasterTableTask extends UpdateMasterTableTask{

    @Override
protected void readMasterDataFileWriteToTempDataFile() {
BufferedReader bufferedReader = null;
//得到一行数据
String line = bufferedReader.readLine();
//此时如果dat文件内空是以-为分隔符的话,对应处理为
String[] split = line.split("-");
writeToTempCsvFile(csvWriter, split);
} //写入到csv中去
private void writeToTempCsvFile(CsvWriter csvWriter,
String split){
/**
* 此外省略几千字
*/
}
}

补充一下:

对于抽像模板类还可以定义钩子方法,方法名一般以do开头,并且是空实现的,在模板方法中可以调用这个方法如果具体类需要就进行重写,不需要的话由于他是空实现,对别的子类也没有影响。

Head First 设计模式系列之一----模板模式(java版)的更多相关文章

  1. Java设计模式系列-抽象工厂模式

    原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...

  2. Java设计模式系列-工厂方法模式

    原创文章,转载请标注出处:<Java设计模式系列-工厂方法模式> 一.概述 工厂,就是生产产品的地方. 在Java设计模式中使用工厂的概念,那就是生成对象的地方了. 本来直接就能创建的对象 ...

  3. Java设计模式系列-装饰器模式

    原创文章,转载请标注出处:<Java设计模式系列-装饰器模式> 一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是 ...

  4. Java设计模式之《模板模式》及使用场景

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9558825.html 模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框 ...

  5. 《JAVA设计模式》之模板模式(Template)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  6. [js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表

    所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理, ...

  7. 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素

    模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...

  8. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  9. 设计模式系列之工厂模式三兄弟(Factory Pattern)

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

随机推荐

  1. mongoDB 3.0.3 以上GUI 连接认证问题

    因为项目要用到mongoDB,今天尝试搭建了一下. 首先mongo还是很好装的,yum 或者手动下载都可以,我是yum安装的最新版本的3.0.4. 主要是安装完成之后,需要安装一个GUI管理工具,我尝 ...

  2. 将java源码打成jar包

    方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] ...

  3. Asp.net中使用资源文件实现网站多语言

    首先需要新建一个ASP.NET Web Application.然后右键项目文件Add->Add ASP.NET Folder->App-GlobalResources. 新建好资源文件夹 ...

  4. dojo(四):ajax请求

    储备知识 1.在介绍新版本的ajax请求之前,需要先了解一些dojo/Deferreds. 初次听到“Deferred”这个概念,可能会觉得这是一个神秘的东西.实际上它在执行异步操作的时候非常强大,例 ...

  5. 二、Socket之UDP异步传输文件

    上一篇文章一.Socket之UDP异步传输文件中,实现了文件的基本传输,但是传输过程中的信息是看不到的,这一篇是对上一篇进行了一些改进,并且可以了解传输的信息(加入了Log),还加入了接收或者拒绝接收 ...

  6. swift 如何使用OC中宏的功能

    swift中没有宏的概念,那么我们在swift使用宏的功能来提高效率呢? 一.使用关键字 let 来声明一个常量 存储相应的值,以下代码声明了常量  myColor 来存储一种指定的颜色 let my ...

  7. ios存储 plist 偏好设置 自定义对象存储

    1,plist Plist注意:不能存储自定义对象 Plist:数组和字典,  如何判断一个对象能不能使用Plist,就看下有没有writeToFile 获取应用的文件夹(应用沙盒) NSString ...

  8. 对setTimeout()第一个参数是字串的深入理解以及eval函数的理解

    <script language="javascript" type="text/javascript"> var a=1; setTimeout( ...

  9. hdu 1095 A+B for Input-Output Practice (VII)

    A+B for Input-Output Practice (VII) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32 ...

  10. [转]分布式系统为什么需要 Tracing?

    分布式系统为什么需要 Tracing?   先介绍一个概念:分布式跟踪,或分布式追踪.   电商平台由数以百计的分布式服务构成,每一个请求路由过来后,会经过多个业务系统并留下足迹,并产生对各种Cach ...