模板方法模式通过抽象类定义固定流程骨架,将可变步骤延迟至子类实现:父类用final方法锁定执行顺序,封装公共逻辑,用抽象方法或钩子方法预留扩展点,结合多态支持业务分支灵活切换。

模板方法通过抽象类定义固定流程骨架,把可变步骤延迟到子类实现,从而复用公共业务逻辑。
用 final 模板方法锁定流程结构
在抽象父类中声明一个 final 方法作为入口,它按既定顺序调用若干基础操作。这个方法不能被子类重写,确保整体流程不被破坏。
- 比如“下单”流程:校验库存 → 创建订单 → 扣减库存 → 发送通知,前、后两步固定,中间两步可定制
- 所有子类共用同一套执行次序,避免每个实现都重复写 if-else 或 while 控制流
把不变逻辑放在父类具体方法里
那些所有子类都一致的行为,直接在抽象类中提供完整实现,子类无需关心也不得修改。
- 例如日志记录、参数校验、事务开启/提交、HTTP 响应统一封装
- 子类只需继承,就能自动获得这些能力,减少样板代码
用抽象方法或钩子方法预留扩展点
流程中需要差异化处理的部分,声明为 abstract 方法(强制子类实现),或提供空实现的 protected 钩子方法(子类可选择覆盖)。
立即学习“Java免费学习笔记(深入)”;
- 抽象方法适合必须定制的环节,如“计算运费”“生成支付单”
- 钩子方法适合可选增强,如“下单成功后发送短信”可由子类决定是否启用
配合多态运行时动态绑定具体行为
客户端只依赖抽象模板类类型,传入不同子类实例,就能在不改调用代码的前提下切换整套业务分支。
- 例如 new WechatOrderTemplate().execute() 和 new AlipayOrderTemplate().execute() 共享同一套模板,仅支付环节不同
- 后续新增 ApplePayOrderTemplate,只要实现抽象方法,原有调度逻辑完全不用动


















