java 设计模式 head first_Head First 设计模式系列之一----模板模式(java版)

本文通过一个生动的实例介绍了Java中的模板模式,阐述了其在业务中的应用。作者通过创建抽象模板类`UpdateMasterTableTask`和两个具体模板类`UpdateStuMasterTableTask`、`UpdateTeacMasterTableTask`,展示了如何在不改变算法结构的前提下,让子类自定义部分业务逻辑。模板方法包括读取数据、更新数据库、备份文件等步骤,而子类可重写数据处理方法以适应不同的数据格式。
摘要由CSDN通过智能技术生成

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

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

一、定义和类图

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

69ca3180f9967aad2b24ed84e44b2ae5.png

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

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

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

抽象模板类UpdateMasterTableTask

packagedesign.a.template;public abstract classUpdateMasterTableTask {//这是个模板方法

public voidrun(){

readMasterDataFileWriteToTempDataFile();

updateMasterTableTask();

backUpDirFile();

}//将dat文件写成临时目录下的cvs文件

protected abstract voidreadMasterDataFileWriteToTempDataFile();//把csv文件更新到数据库中,先删除表中的数据,然后再更新到数据库中

private voidupdateMasterTableTask(){

deleteMasterTableData();

insertMasterTableData();

}//备份dat文件到指定位置中

private voidbackUpDirFile(){/*** 此外省略几千字*/}//删除表中的数据

private voiddeleteMasterTableData(){/*** 此外省略几千字*/}//把数据更新到数据库

private voidinsertMasterTableData(){/*** 此外省略几千字*/}

}

具体模板类1UpdateStuMasterTableTask

packagedesign.a.template;importjava.io.BufferedReader;importjava.io.IOException;public class UpdateStuMasterTableTask extendsUpdateMasterTableTask{

@Overrideprotected voidreadMasterDataFileWriteToTempDataFile() {

BufferedReader bufferedReader= null;//得到一行数据

String line =bufferedReader.readLine();//此时如果dat文件内空是以,为分隔符的话,对应处理为

String[] split = line.split(",");

writeToTempCsvFile(csvWriter, split);

}//写入到csv中去

private voidwriteToTempCsvFile(CsvWriter csvWriter,

String split){/*** 此外省略几千字*/}

}

具体模板类2UpdateTeacMasterTableTask

packagedesign.a.template;importjava.io.BufferedReader;public class UpdateTeacMasterTableTask extendsUpdateMasterTableTask{

@Overrideprotected voidreadMasterDataFileWriteToTempDataFile() {

BufferedReader bufferedReader= null;//得到一行数据

String line =bufferedReader.readLine();//此时如果dat文件内空是以-为分隔符的话,对应处理为

String[] split = line.split("-");

writeToTempCsvFile(csvWriter, split);

}//写入到csv中去

private voidwriteToTempCsvFile(CsvWriter csvWriter,

String split){/*** 此外省略几千字*/}

}

补充一下:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值