乐于分享
好东西不私藏

Template Method(模板方法)

Template Method(模板方法)

Template Method(模板方法)

1. 模式的定义

Template Method(模板方法)是一种行为型设计模式。
它的核心思想是:在抽象类中定义算法骨架,将部分步骤延迟到子类实现,使子类在不改变流程结构的情况下定制具体行为

模板方法强调“流程固定、步骤可变”:

  • 主流程顺序由模板方法控制
  • 可变步骤交由子类实现
  • 公共步骤在父类复用

1.1 核心角色

  • AbstractClass(抽象模板):定义模板方法与抽象步骤
  • ConcreteClass(具体实现):实现差异化步骤
  • Hook(钩子方法,可选):子类可选择覆盖的可选扩展点

2. 模式的应用场景

当多个业务流程“骨架相同、细节不同”时,模板方法模式非常实用。

2.1 典型场景

  • 医疗:不同检验项目的数据导入流程(解析→校验→转换→入库)
  • 服装零售:不同渠道订单同步流程(拉取→映射→校验→入库)
  • 仓储:不同承运商运单处理流程(验签→解析→状态更新→通知)
  • 金融:不同通道对账流程(取数→对齐→差异处理→报表)
  • 教育:不同考试数据清洗流程(读取→去重→评分→发布)

2.2 适用信号

  • 多个流程存在重复代码与相同步骤顺序
  • 只想开放部分步骤给扩展方
  • 需要强约束流程主干不被破坏

3. 模式的优缺点

3.1 优点

  • 复用高:公共流程沉淀在父类
  • 一致性强:统一算法骨架避免流程跑偏
  • 扩展清晰:子类只关注差异步骤

3.2 缺点

  • 继承耦合:子类受父类流程约束
  • 层级过深风险:扩展过多可能导致继承链复杂
  • 运行时切换不灵活:与策略模式相比灵活性较弱

3.3 使用边界

若流程骨架并不稳定,模板方法不合适。
当流程骨架稳定且步骤差异明确时,模板方法模式收益较高。


4. 结合具体业务分析

下面用“医疗检验数据导入”场景说明。

4.1 业务背景

LIS 对接多个厂商,数据格式不同,但导入主流程一致:

  1. 拉取原始数据
  2. 校验完整性
  3. 转换标准结构
  4. 入库并通知

4.2 业务流程拆解

  1. 抽象模板定义稳定导入骨架
  2. 各厂商子类实现差异化步骤
  3. 主流程调用统一 Execute
  4. 新增厂商仅新增子类实现

4.3 该业务中体现的模式价值

  • 避免各厂商流程实现散乱和重复
  • 保证导入关键步骤不遗漏
  • 扩展新厂商成本低且风险可控

5. 小结

模板方法模式的本质是:
固定流程骨架,把可变步骤延迟到子类实现。

当你的系统存在“流程同构、步骤异构”的问题时,模板方法模式非常高效。