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

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

一、定义和类图

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

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

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

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

抽象模板类UpdateMasterTableTask

  1. package design.a.template;
  2.  
  3. public abstract class UpdateMasterTableTask {
  4. //这是个模板方法
  5. public void run(){
  6. readMasterDataFileWriteToTempDataFile();
  7. updateMasterTableTask();
  8. backUpDirFile();
  9. }
  10.  
  11. //将dat文件写成临时目录下的cvs文件
  12. protected abstract void readMasterDataFileWriteToTempDataFile();
  13.  
  14. //把csv文件更新到数据库中,先删除表中的数据,然后再更新到数据库中
  15. private void updateMasterTableTask(){
  16. deleteMasterTableData();
  17. insertMasterTableData();
  18. }
  19.  
  20. //备份dat文件到指定位置中
  21. private void backUpDirFile(){
  22. /**
  23. * 此外省略几千字
  24. */
  25. }
  26.  
  27. //删除表中的数据
  28. private void deleteMasterTableData(){
  29. /**
  30. * 此外省略几千字
  31. */
  32. }
  33.  
  34. //把数据更新到数据库
  35. private void insertMasterTableData(){
  36. /**
  37. * 此外省略几千字
  38. */
  39. }
  40.  
  41. }

具体模板类1UpdateStuMasterTableTask

  1. package design.a.template;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5.  
  6. public class UpdateStuMasterTableTask extends UpdateMasterTableTask{
  7.  
  8. @Override
  9. protected void readMasterDataFileWriteToTempDataFile() {
  10. BufferedReader bufferedReader = null;
  11. //得到一行数据
  12. String line = bufferedReader.readLine();
  13. //此时如果dat文件内空是以,为分隔符的话,对应处理为
  14. String[] split = line.split(",");
  15. writeToTempCsvFile(csvWriter, split);
  16. }
  17.  
  18. //写入到csv中去
  19. private void writeToTempCsvFile(CsvWriter csvWriter,
  20. String split){
  21. /**
  22. * 此外省略几千字
  23. */
  24. }
  25. }

具体模板类2UpdateTeacMasterTableTask

  1. package design.a.template;
  2.  
  3. import java.io.BufferedReader;
  4.  
  5. public class UpdateTeacMasterTableTask extends UpdateMasterTableTask{
  6.  
  7. @Override
  8. protected void readMasterDataFileWriteToTempDataFile() {
  9. BufferedReader bufferedReader = null;
  10. //得到一行数据
  11. String line = bufferedReader.readLine();
  12. //此时如果dat文件内空是以-为分隔符的话,对应处理为
  13. String[] split = line.split("-");
  14. writeToTempCsvFile(csvWriter, split);
  15. }
  16.  
  17. //写入到csv中去
  18. private void writeToTempCsvFile(CsvWriter csvWriter,
  19. String split){
  20. /**
  21. * 此外省略几千字
  22. */
  23. }
  24. }

补充一下:

对于抽像模板类还可以定义钩子方法,方法名一般以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. cocos2d-x 动画加速与减速

    转自:http://novacreo.com/%E7%A8%8B%E5%BA%8F%E7%BB%84/cocos2d-x%E5%8A%A8%E7%94%BB%E5%8A%A0%E9%80%9F%E4% ...

  2. 实例源码--Android日历实例源码

      下载源码   技术要点: 1.Android基础控件的使用 2.Android应用开发基础框架 3.源码带有非常详细的中文 注释 ...... 详细介绍: 1. Android应用开 发技术 此套 ...

  3. java_泛型方法使用实例

    //提供两种使用情况,第二种情况定义前者是后者的子类-类型通配方式 package ming; import java.util.ArrayList; import java.util.Collect ...

  4. 显示/去掉CONSOLE窗口

    众所周知,控制台应用程序一般都会显示一个控制台窗口(虚拟DOS窗口),但很多时候控制台程序的执行逻辑根本不需要与用户进行交互,所以显示这个难看的窗口纯属多余,那么如何将它屏蔽掉呢?下面我向大家介绍一种 ...

  5. Google前工程经理王忻:如何准备软件工程师的面试

    http://t.jobdu.com/thread-368-1-1.html 导读:原文作者王忻,Google前工程经理,2003年月加入Google,是Google Lively背后的主导力量,是G ...

  6. android开发之路03

    一.Activity1.如何在一个应用程序中定义多个Activity:①定义一个类,继承Activity:②在该类当中,复写Activity当中的onCreate方法:③在AndroidManifes ...

  7. JAVA_FastJson

    package com.qf.mobiletrain01; import java.util.List; import com.alibaba.fastjson.JSON; class Student ...

  8. 给某个view增加颜色渐变图层

    //给某个view增加颜色透明度渐变图层 - (void) insertTransparentGradient { NSLog(@"%@",NSStringFromCGRect(s ...

  9. 关于JSP异常的处理

    jsp中错误处理页面-isErrorPage="true" 举例说明:mustBeError.jsp <%@ page contentType="text/html ...

  10. NoSQL选型

    传统“关系型数据库”在应付互联网WEB2.0应用已显示的力不从心,由其是超大规模和高并发的SNS类型的WEB2.0网站.主要需要应对以下三方面难题: 1.对数据库高并发读写的要求. 2.对数据库高可扩 ...