骨架实现类模式通过抽象类定义通用流程并强制子类实现变化点,如dataexporter中final export()调用validate()、preparedata()、doexport()和cleanup(),其中doexport()为抽象方法,支持钩子方法和protected具体方法定制。

在 Java 中,骨架实现类(Skeleton Implementation)模式通常通过抽象类来体现:抽象类提供通用逻辑和默认行为,同时定义必须由子类实现的核心方法。这种设计既复用代码,又保留扩展灵活性。
抽象类定义骨架结构
抽象类作为“骨架”,封装不变的部分(如流程控制、公共校验、日志记录),把变化点声明为抽象方法,强制子类定制。
- 用 abstract class 声明,不能被实例化
- 包含具体方法(默认实现)和抽象方法(无方法体)
- 可含构造器、字段、静态方法等,支持初始化逻辑
典型骨架流程示例
比如一个数据导出功能:
abstract class DataExporter {
// 骨架方法:定义执行顺序
public final void export() {
validate();
prepareData();
doExport(); // 子类必须实现的具体导出逻辑
cleanup();
}
protected void validate() { System.out.println("校验参数"); }
protected void prepareData() { System.out.println("准备数据"); }
protected void cleanup() { System.out.println("清理资源"); }
// 变化点:由子类决定如何导出
protected abstract void doExport();
}
子类只需关注 doExport(),其余流程自动复用。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
支持模板方法与钩子方法结合
除了强制实现的抽象方法,还可提供可选覆盖的钩子方法(hook method),增强定制粒度:
- 钩子方法:用 protected void onBeforeExport() {} 形式声明,默认空实现
- 骨架中调用钩子,子类按需重写,不影响主流程
- 避免子类重复调用 super.xxx(),也减少模板方法膨胀
注意 final + abstract 的协作边界
确保骨架不被破坏的关键是控制扩展点:
- 骨架方法(如 export())加 final,禁止子类重写流程
- 抽象方法不加 final,明确要求子类实现
- 具体方法可设为 protected,允许子类增强但不替代主干
这样既保证一致性,又保留必要自由度。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










