- 目的 : 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
- 核心 : 抽象类定义模板方法(包含算法骨架,由基本方法组成),基本方法可以是抽象方法(由子类实现)或具体方法/钩子方法(Hook Method,提供默认实现或扩展点)。
- 场景 :固定流程,可变细节(如支付、审批);多个子类共享相似流程(如数据库操作、文件导出)。
首先是抽象基类,定义模板方法的框架
java
package templatemethod;
public abstract class BaseTemplate {
public abstract void part1();
public abstract void part2();
public abstract void part3();
// 模板方法,定义算法骨架,使用final防止子类修改算法结构
public final void useTemplateMethod(){
part1();
part2();
part3();
}
}
然后第一个模板方法具体实现类
java
package templatemethod;
public class TemplateMethod1 extends BaseTemplate {
@Override
public void part1() {
System.out.println("模板1第一部分实现");
}
@Override
public void part2() {
System.out.println("模板1第二部分实现");
}
@Override
public void part3() {
System.out.println("模板1第三部分实现");
}
}
第二个模板方法具体实现类
java
package templatemethod;
public class TemplateMethod2 extends BaseTemplate {
@Override
public void part1() {
System.out.println("模板2第一部分实现");
}
@Override
public void part2() {
System.out.println("模板2第二部分实现");
}
@Override
public void part3() {
System.out.println("模板2第三部分实现");
}
}
函数入口
java
package templatemethod;
public class MainTest {
public static void main(String[] args) {
// 使用第一种模板实现
BaseTemplate template = new TemplateMethod1();
template.useTemplateMethod();
System.out.println();
// 使用第二种模板实现
template = new TemplateMethod2();
template.useTemplateMethod();
}
}
终端输出
模板1第一部分实现
模板1第二部分实现
模板1第三部分实现
模板2第一部分实现
模板2第二部分实现
模板2第三部分实现
