模版方法模式:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以不改变一个算法的结果即可重定义该算法的某些特定步骤。
比如说:要输入一个excel文件, 然后需要对该文件内容进行校验,校验完成之后 插入数据库。
算法的步骤就是: 校验->落库
但是不同的文件,里面的数据不同,比如说订单的线下数据excel, 款项的线下的数据excel 等等,这样的话 校验的逻辑不同,最后要落到的具体数据库表也不同,订单要落到order表,款项要落到item表。
这样就可以将校验的方法和落库的方法抽象出来,留到子类中去实现,比如说订单导入的子类,款项导入的子类。
定义抽象的模版父类
public abstract class AbstractClass {
private String File;
public void importFile(String File){
try {
valid(File); //先校验
dohand(File);//进行处理
}catch (Exception ex){
ex.printStackTrace(); //记录异常
}
}
public abstract Boolean valid(String File);
public abstract void dohand(String File);
}
定义子类
public class ImportFile extends AbstractClass {
@Override
public Boolean valid(String File) {
System.out.println("执行验证"+File);
return Boolean.TRUE;
}
@Override
public void dohand(String File) {
System.out.println("执行处理"+File);
}
}
定义应用
public class Aplication {
public static void main(String[] args) {
ImportFile importFile=new ImportFile();
importFile.importFile("文件A");
}
}
输出结果:
先执行valid再执行dohand ,但是子类无需关心具体的步骤逻辑,只需要把每一步的方法实现好就行。
这里有一个真实的线上例子
https://blog.csdn.net/qq_20009015/article/details/90245872