模板方法模式通过抽象类定义算法骨架,强制子类实现抽象步骤并可选覆写钩子方法,以保证流程统一且支持灵活扩展;模板方法须用final修饰,防止被重写破坏结构。

模板方法模式通过在抽象类中定义算法骨架,将具体步骤延迟到子类实现,既保证流程统一性,又支持行为灵活扩展。
抽象类定义模板方法与钩子操作
抽象类需声明一个 final 的模板方法,封装不变的执行顺序;同时提供若干 抽象方法(强制子类实现)和 空实现的钩子方法(可选覆盖)。模板方法内部按序调用这些方法,形成稳定结构。
- 模板方法必须用 final 修饰,防止子类重写破坏流程
- 抽象方法代表核心可变逻辑,如
doStep1()、doStep2() - 钩子方法如
isStep3Needed()返回 boolean,默认返回 true,子类可覆写以控制流程分支
子类实现具体步骤并选择性定制钩子
子类继承抽象类后,只需实现所有抽象方法,即可获得完整可用的算法。若需微调执行逻辑(如跳过某步、增加前置校验),可覆写钩子方法,无需改动模板结构。
- 不重写模板方法,只实现
doStep1()等抽象方法 - 根据业务需要决定是否覆写钩子方法,例如让
isLoggingEnabled()返回 false 来关闭日志 - 避免在子类中新增公共方法来替代模板调用,否则会削弱模式约束力
典型代码结构示意
以下为 Java 中简洁、标准的实现片段:
abstract class DataProcessor {
// 模板方法:不可重写
public final void process() {
loadData();
if (isValidationRequired()) validateData();
transformData();
saveData();
afterProcess(); // 钩子,空实现
}
// 抽象步骤:子类必须实现
protected abstract void loadData();
protected abstract void transformData();
protected abstract void saveData();
// 钩子方法:默认行为,可选覆写
protected boolean isValidationRequired() { return true; }
protected void afterProcess() {} // 默认空操作
}










