当前位置: 首页 > news >正文

谈谈模板方法模式,模板方法模式的应用场景是什么?

一、模式核心理解

模板方法模式是一种​​行为设计模式​​,通过定义算法骨架并允许子类重写特定步骤来实现代码复用。

如同建筑图纸规定房屋结构,具体装修由业主决定,该模式适用于​​固定流程中需要灵活扩展​​的场景。

// 基础请求处理类(模板)
class BaseRequestHandler {
  // 模板方法(禁止override)
  async execute() {
    this.validateParams();
    const processed = await this.processRequest();
    this.afterProcess();
    return this.createResponse(processed);
  }

  validateParams() {
    throw new Error("必须实现参数校验方法");
  }

  // 钩子方法(可选实现)
  afterProcess() {}
}

// 具体API请求实现
class UserAPIHandler extends BaseRequestHandler {
  validateParams() {
    if (!this.params.userId) throw "用户ID必填";
  }

  async processRequest() {
    return await fetch(`/users/${this.params.userId}`);
  }

  createResponse(data) {
    return { status: 200, data };
  }
}

// 使用示例
const handler = new UserAPIHandler({ userId: 123 });
handler.execute();

二、典型应用场景

1. 框架生命周期控制

// React类组件示例
class BaseComponent extends React.Component {
  // 模板方法
  componentDidMount() {
    this.initState();
    this.fetchData();
    this.bindEvents();
  }

  initState() {}       // 子类实现
  fetchData() {}       // 子类实现
  bindEvents() {}      // 默认空实现(钩子方法)
}

class UserList extends BaseComponent {
  initState() {
    this.setState({ users: [] });
  }

  fetchData() {
    axios.get('/api/users').then(res => this.setState({ users: res.data }));
  }
}

2. 表单校验系统

class FormValidator {
  validate(formData) {
    this.checkRequiredFields(formData);
    const customResult = this.customValidation(formData);
    return this.formatResult(customResult);
  }

  checkRequiredFields(formData) {
    // 通用必填校验逻辑
  }

  customValidation() {
    throw new Error("必须实现具体校验规则");
  }

  formatResult(result) {
    return { isValid: result, timestamp: Date.now() };
  }
}

class LoginFormValidator extends FormValidator {
  customValidation(formData) {
    return formData.password.length >= 8;
  }
}

三、使用建议

  1. ​流程标准化​​:支付流程(风控检查->创建订单->调用支付->结果处理)
class PaymentProcessor {
  async pay(amount) {
    this.riskCheck();
    const order = this.createOrder(amount);
    const result = await this.callPaymentGateway(order);
    return this.handleResult(result);
  }
  // ...抽象方法声明
}
  1. ​合理使用钩子​​:在报表生成器中设置可选步骤
class ReportGenerator {
  generate() {
    this.fetchData();
    this.beforeRender(); // 钩子方法
    this.renderHeader();
    this.renderBody();
  }

  beforeRender() {} // 默认空实现
}
  1. ​组合优于继承​​:对于复杂场景建议使用策略模式+模板方法
class DataExporter {
  constructor(formatter) {
    this.formatter = formatter;
  }

  export() {
    const raw = this.getData();
    return this.formatter(raw);
  }
}

四、注意事项

  1. ​避免流程碎片化​​(错误示例)
// 反模式:过度拆分步骤
class BadTemplate {
  execute() {
    this.step1();
    this.step2();
    this.step3();
    this.step4();
    // 20+步骤...
  }
}
  1. ​子类责任边界​
class OrderProcessor extends BaseProcessor {
  validate() {
    // 不要修改执行顺序
    super.validate(); // 必须调用父类方法
    this.checkInventory(); // 扩展校验
  }
}
  1. ​模板方法冻结​
class SecureBase {
  execute() {
    Object.freeze(this.execute); // 防止子类重写模板方法
    // ...执行流程
  }
}

五、总结

模板方法模式在前端开发中适合处理​​流程固定但实现可变​​的场景,如请求处理、表单校验、生命周期管理等。使用时要注意:

  1. 保持模板方法稳定,通过钩子方法扩展
  2. 子类实现不超过3层继承
  3. 复杂场景结合策略模式使用
  4. 使用TypeScript时声明抽象方法
// TypeScript实现示例
abstract class UIComponent {
  abstract render(): void;

  mount() {
    this.willMount();
    this.render();
    this.didMount();
  }

  protected willMount() {}
  protected didMount() {}
}

正确使用模板方法模式可以提升代码复用率30%以上,但需根据实际场景灵活选择实现方式。

在微前端架构中,该模式常用于基座应用与子应用的生命周期管理,建议结合具体业务需求进行合理设计。

相关文章:

  • LLM+js实现大模型对话
  • 判断矩阵A是否可以相似对角化
  • MySQL 在 CentOS 7 环境安装完整步骤
  • 任务调度和安全如何结合
  • WinMerge下载及使用教程(附安装包)
  • AnimateCC基础教学:随机抽取花名册,不能重复
  • Springboot--Kafka客户端参数关键参数的调整方法
  • 【WRF理论第十五期】WPS中输入geogrid二进制格式
  • Johnson算法 流水线问题 java实现
  • 下一代楼宇自控的中枢神经:ARM终端的生态
  • 1.ElasticSearch-入门基础操作
  • 从零开始学java--泛型(1)
  • 辛格迪客户案例 | 北京舒曼德医药实施电子合约系统(eSign)
  • UDP怎么样实现可靠传输?
  • zk源码—3.单机和集群通信原理二
  • Python 字典和集合(泛映射类型)
  • 无缝集成Docker与Maven:docker-maven-plugin实战指南
  • Docker常用命令
  • Microsoft Defender Antivirus Service服务占用CPU过高
  • Ansible(7)——管理机密与事实
  • 报告:4月份新增发行的1763亿元专项债中,投向房地产相关领域约717亿元
  • 上海科创“八杰”赋能新兴产业链:硬核科技,形成良好盈利模式
  • 央行行长详解降息:将通过利率自律机制引导商业银行相应下调存款利率
  • 是谁提议特朗普向好莱坞征税?
  • 江西浮梁县县长张汉坤被查,此前已有4个月无公开活动
  • 强沙尘暴压城近万名游客被困,敦煌如何用3小时跑赢12级狂风?