模板方法模式通过抽象父类定义流程骨架、子类实现具体步骤,封装不变逻辑并开放可变部分;支持类继承和函数组合两种实现方式,适用于流程稳定而步骤多变的场景。

模板方法模式在 JavaScript 中通过抽象父类定义执行流程骨架,子类实现具体步骤,从而固定流程、灵活扩展。核心是“封装不变,开放可变”。
用类和继承实现基础模板方法
定义一个基类,把固定流程写在公共方法中,用抽象方法(或抛错)预留钩子给子类实现:
- 父类中 templateMethod() 按顺序调用若干步骤方法(如 step1()、step2())
- 这些步骤方法在父类中默认抛出错误,强制子类重写
- 子类继承后只覆盖需要定制的步骤,不改动主流程
示例:
class DataProcessor {
process() {
this.validate();
this.parse();
this.transform();
this.save();
}
validate() { throw new Error('必须实现 validate'); }
parse() { throw new Error('必须实现 parse'); }
transform() { throw new Error('必须实现 transform'); }
save() { throw new Error('必须实现 save'); }
}
<p>class JsonProcessor extends DataProcessor {
validate() { console.log('检查 JSON 格式'); }
parse() { console.log('解析为对象'); }
transform() { console.log('添加时间戳字段'); }
save() { console.log('存入 localStorage'); }
}</p><p>const proc = new JsonProcessor();
proc.process(); // 按序输出四步日志</p>用函数组合模拟模板方法(无继承场景)
ES6+ 常用函数式风格:把流程拆成纯函数,用高阶函数组装,各步骤可插拔:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 定义一个 createPipeline() 工厂函数,接收步骤数组
- 返回一个执行函数,按序调用每个步骤(支持同步/async)
- 每步函数接收上下文对象(如 { data, options }),可读可改
示例:
const createPipeline = (...steps) => async (context) => {
for (const step of steps) {
await step(context);
}
return context;
};
<p>const validate = ({ data }) => {
if (typeof data !== 'string') throw new Error('数据必须是字符串');
};
const parseJson = async ({ data }) => {
data.parsed = JSON.parse(data);
};
const enrich = ({ data }) => {
data.parsed.enriched = true;
};</p><p>const pipeline = createPipeline(validate, parseJson, enrich);
pipeline({ data: '{"id": 1}' }).then(console.log);</p>关键细节与实用建议
真正用好模板方法,要注意三点:
- 流程边界要清晰:哪些必须子类实现(抽象步骤),哪些可选覆写(钩子方法,如 beforeSave() 默认空函数)
- 避免子类破坏流程:父类方法设为 private(用 # 私有字段)或文档明确禁止调用顺序变更
- 异步支持要统一:如果某步可能异步,整个模板方法应统一返回 Promise,步骤函数统一用 async/await 或返回 Promise
什么时候更适合用模板方法?
适合存在稳定骨架 + 多种变体的场景,比如:
- 不同格式的数据导入(CSV / JSON / XML)—— 解析逻辑不同,校验和保存一致
- 前端请求拦截器链(鉴权 → 序列化 → 发送 → 错误归一化)—— 各环节可插拔
- 组件生命周期(如自定义渲染器:mount → render → bindEvents → unmount)
若流程差异大或步骤极少,直接策略模式或简单函数更轻量。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










