参考:https://blog.csdn.net/weixin_48052161/article/details/119655854
模板方法(Template Method)模式:定义一个操作中的算法的骨架,而将一些步骤延 迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
- 这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在 内容上存在变数的环节。
日常生活中的模板方法:
造房时,地基、走线、水管都一样,只有在建筑后期装修上才有差异
西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。
对于汽车,车从发动到停车的顺序是相同的,不同的是引擎声、鸣笛声等
spring 中对 MYbatis的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。
代码演示:
计算加减乘除,把这四项基本运算,抽象成一个模板方法.
模板抽象类:AbstractCalculater
package com.example.dtest.design23.templateMode;
public abstract class AbstractCalculater {
abstract public int calculate(int num1,int num2);
/*主方法,实现对本类其他方法的调用*/
public final int calculate(String exp,String opt){
int array[] = split(exp,opt);
return calculate(array[0],array[1]);
}
// 提取参数
public int[] split(String exp,String opt){
String array[] = exp.split(opt);
int arrayInt[] = new int[2];
arrayInt[0] = Integer.parseInt(array[0].trim());//trim():除去字符串中空白字符
arrayInt[1] = Integer.parseInt(array[1].trim());
return arrayInt;
}
}
实现膜版的加法算法类:Plus
package com.example.dtest.design23.templateMode;
public class Plus extends AbstractCalculater{
@Override
public int calculate(int num1, int num2) {
return num1 + num2;
}
}
测试类:
package com.example.dtest.design23.templateMode;
public class TemplateModeTest {
public static void main(String[] args) {
String exp = "8 + 8";
AbstractCalculater calculater = new Plus();
int result = calculater.calculate(exp, "\\+");
System.out.println("8 + 8="+result);
}
}
模板方法:抽象类的继承和实现天生用于模板方法的,可以说它就是为模板模式而生,细品!!!!