抽象类在模板模式中定义固定流程骨架,用final修饰模板方法确保结构稳定,abstract声明必须实现的核心步骤,提供默认实现的钩子方法和具体方法供子类灵活扩展。

抽象类在模板模式中承担骨架设计角色,它把不变的流程固定下来,把可变的部分留给子类实现。关键在于用 final 修饰模板方法、用 abstract 声明必须重写的步骤,同时允许提供默认实现来复用逻辑。
模板方法必须声明为 final
防止子类意外覆盖整体流程,确保算法结构稳定。比如处理数据的标准顺序:读取 → 转换 → 写入,这个顺序不能由子类改动。
- 在抽象类中定义
public final void process(),内部按序调用若干步骤方法 - 所有步骤方法不声明为
final,以便子类灵活实现或覆写 - 若某一步骤有通用逻辑(如日志记录、异常包装),可在抽象类中直接提供默认实现
区分抽象步骤与钩子方法
不是所有步骤都强制子类实现。有的是核心逻辑(必须重写),有的是扩展点(可选覆写)。
-
抽象方法:用
abstract修饰,子类必须实现,例如readData()、transformData() -
钩子方法:普通方法但方法体为空或含默认空逻辑,子类按需覆写,例如
beforeProcess()或onError() - 具体方法:已有完整实现,子类可直接使用或选择覆写,例如统一的文件关闭、资源清理逻辑
子类只需关注差异化逻辑
继承抽象模板类后,子类不用重复编写流程控制代码,只实现真正不同的部分。
- CSV 处理器重写
readData()解析 CSV 格式,JSON 处理器则解析 JSON - 两者共用同一套
process()调用链,无需各自写“先读再转后写”的重复逻辑 - 如果某类处理器不需要写入,可覆写
writeData()为空方法,不影响主流程
构造与初始化要配合模板使用
抽象类可定义构造方法,用于初始化共享状态(如配置、连接池、上下文),这些在模板方法执行前就已就绪。
- 构造器中可校验必要参数,避免子类遗漏关键配置
- 支持带参构造,让子类在实例化时传入定制化依赖(如特定的数据源)
- 注意:抽象类构造器不能直接 new 调用,只在子类构造中隐式或显式调用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











