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

Java设计模式之模板方法模式(Template Method Pattern)

模板方法模式(Template Method Pattern) 是一种 行为型设计模式,用于定义算法的骨架,将某些步骤的具体实现延迟到子类中。其核心思想是 在父类中定义算法的结构,子类在不改变算法流程的前提下重写特定步骤

1. 核心角色

角色说明
抽象类(AbstractClass)定义算法的骨架(模板方法),并声明抽象方法或钩子方法供子类实现。
具体子类(ConcreteClass)实现抽象类中定义的抽象方法,完成算法中特定步骤的具体逻辑。

2. 应用场景

  • 固定流程,可变细节:当多个类有相似的流程,但某些步骤实现不同时(如数据处理流程、文件解析流程)。

  • 框架扩展:框架定义通用流程,允许用户自定义部分步骤(如Servlet生命周期、JUnit测试流程)。

  • 避免代码重复:抽取公共代码到父类,减少冗余。


3. 代码示例:制作饮料

假设需要实现制作茶和咖啡的流程,两者步骤类似(烧水、冲泡、倒入杯子),但具体冲泡方法和添加调料不同。

步骤1:定义抽象类(模板方法)
步骤2:实现具体子类
步骤3:客户端调用

4. 模板方法模式类图

5. 模板方法模式优缺点

优点缺点
代码复用性强,减少冗余代码。每个不同实现需一个子类,可能增加类的数量。
父类控制算法流程,子类扩展细节。父类与子类耦合度高,修改父类可能影响子类。
通过钩子方法提供扩展点。

6. 模板方法模式 vs. 策略模式

模式核心思想适用场景
模板方法模式父类定义算法骨架,子类实现细节。流程固定,部分步骤可变。
策略模式定义算法族,封装为独立策略类。需要动态切换完整算法实现。

7. 实际应用场景

  1. Servlet生命周期

    • javax.servlet.http.HttpServlet 的 service() 方法调用 doGet() 或 doPost()

    • 用户只需重写 doGet(),无需关注请求分发的逻辑。

  2. JUnit测试框架

    • 测试类的 setUp() 和 tearDown() 方法为模板方法,由框架调用。

    • 用户重写这些方法定义测试环境初始化和清理。

  3. Spring框架

    • JdbcTemplate 的 execute() 方法定义连接获取、异常处理等流程。

    • 用户通过回调接口(如 PreparedStatementCreator)实现具体SQL操作。


9. 总结

  • 核心价值:通过父类定义算法流程,子类灵活实现具体步骤,实现代码复用和流程控制。

  • 关键设计:模板方法声明为 final 防止子类修改流程,抽象方法强制子类实现必要步骤。

  • 适用性:适用于具有固定流程但部分步骤需要定制的场景,如框架扩展、多态流程处理。


http://www.kler.cn/a/592647.html

相关文章:

  • Redis 三主三从集群部署的完整方案
  • ASP3605同步降压调节器——满足汽车电子严苛要求的电源芯片方案
  • 进程间通信(1)——管道
  • 数据结构知识点1
  • excel文件有两列,循环读取文件两列赋值到字典列表。字典的有两个key,分别为question和answer。将最终结果输出到json文件
  • 使用STM32CubeMX+DMA+空闲中断实现串口接收和发送数据(STM32G070CBT6)
  • 【开源宝藏】30天学会CSS - DAY3 第三课 滑动文本+变色
  • mysql 索引的使用
  • mapbox-gl源码中解析style加载地图过程详解
  • 线性规划的标准形式
  • Golang开发
  • 【Dive Into Stable Diffusion v3.5】1:开源项目正式发布——深入探索SDv3.5模型全参/LoRA/RLHF训练
  • 使用 Wireshark 在 Ubuntu 22.04 上抓包分析网络流量
  • 危化品经营单位考试:从基础夯实到能力提升的进阶之路​
  • Docker 存储
  • 麒麟服务器操作系统Node.js环境部署手册
  • 当今前沿技术:改变生活的创新趋势
  • 微信小程序检测滚动到某元素位置的计算方法
  • 黑马跟学.苍穹外卖.Day08
  • Android Launcher3 首屏图标锁定技术方案解析