抽象类配合模板方法模式是java规范业务流程最直接可控的方式:用抽象类锁住流程骨架,模板方法固化执行顺序,可变环节交由子类实现;抽象方法强制实现防缺位,钩子方法支持柔性扩展,构造器统一注入上下文保障一致性。

抽象类配合模板方法模式,是 Java 中规范业务流程最直接、最可控的方式:用抽象类锁住流程骨架,用模板方法固化执行顺序,把可变环节交给子类实现——既防错,又留活。
用抽象类定义不可变的流程骨架
业务流程一旦上线,核心步骤顺序就不能随意改动。比如订单支付必须先校验、再扣款、后通知、最后记日志。这个顺序由抽象类中的 final 模板方法 严格控制:
- 模板方法(如
pay(String orderId))声明为final,子类无法重写或打乱调用顺序 - 每一步调用都写死在模板方法体内,比如
checkParam()→doPay()→notify()→log() - 所有固定逻辑(校验、通知、日志)在抽象类里直接实现,避免子类重复编写或漏掉
把差异化逻辑声明为抽象方法
哪些步骤会因渠道/场景而不同,就抽成抽象方法,强制子类实现:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 例如
protected abstract void doPay(String orderId);—— 微信、支付宝、银行卡各自实现扣款细节 - 再如
protected abstract String generateReceipt();—— 电子发票、纸质回单、无单据等策略由子类决定 - 抽象方法不提供默认行为,子类若不实现,编译直接报错,从源头杜绝流程“缺位”
用钩子方法支持条件分支与柔性扩展
有些步骤不是“必做”,而是“按需做”,比如是否发送短信、是否触发风控扫描。这时用钩子方法(Hook)更自然:
- 在抽象类中提供带默认实现的普通方法,如
protected boolean needSmsNotify() { return false; } - 子类可选择性覆盖:
@Override protected boolean needSmsNotify() { return true; } - 模板方法中用
if (needSmsNotify()) { sendSms(); }控制流程分支,不破坏主干结构
结合构造与初始化保证上下文一致性
流程依赖的公共状态(如商户号、签名密钥、超时配置),可在抽象类构造器中统一注入并校验:
- 抽象类定义
protected final String merchantId;和protected final long timeoutMs; - 子类通过
super(merchantId, timeoutMs)传参,确保每个具体实现都有合法上下文 - 避免子类各自 new 配置对象,导致参数不一致、空指针或硬编码散落
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










