1. 概念
模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
2.实现步骤
- 定义抽象类,类中定义算法骨架,公有逻辑抽象类实现,其它私有逻辑延迟至子类实现
- 子类继承抽象类,实现具体算法
3.案例
本例以遇近做的需求数据迁移为例,有两种类型数据要做迁移,其中数据迁移前需对传入参数进行校验,同时停止流程,最后将传入数据转换成对应迁移数据,入库
(1)定义抽象模板,实现公共逻辑
public abstract class AbstractTemplate {
public void dataMigration(){
//1.数据校验
dataValidation();
//2.停止流程
stopProcess();
//3.数据转换
dataConversion();
//4.迁移入库
doMigration();
}
protected abstract void doMigration();
protected abstract void dataConversion();
protected void stopProcess() {
System.out.println("停止现有流程");
}
protected void dataValidation() {
System.out.println("校验传入参数");
}
}
(2) 定义具体迁移对象,并实现私有逻辑
// 迁移方案一,实现抽象模板
public class MigrationPlanOne extends AbstractTemplate {
@Override
protected void dataConversion() {
System.out.println("转换为迁移方案一所需数据格式");
}
@Override
protected void doMigration() {
System.out.println("执行迁移方案一数据迁移");
}
}
------------------------------------------------------------------------------
// 迁移方案二,实现抽象模板
public class MigrationPlanTwo extends AbstractTemplate {
@Override
protected void dataConversion() {
System.out.println("执行迁移方案二数据转换");
}
@Override
protected void doMigration() {
System.out.println("执行迁移方案二数据迁移");
}
}
(3)测试案例
public class MainTest {
public static void main(String[] args) {
AbstractTemplate migrationPlanOne = new MigrationPlanOne();
migrationPlanOne.dataMigration();
System.out.println("++++++++++++++++++++++++++++++++++");
AbstractTemplate migrationPlantwo = new MigrationPlanTwo();
migrationPlantwo.dataMigration();
}
}
------------------------------------------------------------------------------
//输出结果
校验传入参数
停止现有流程
转换为迁移方案一所需数据格式
执行迁移方案一数据迁移
++++++++++++++++++++++++++++++++++
校验传入参数
停止现有流程
执行迁移方案二数据转换
执行迁移方案二数据迁移