模板设计模式(Template Method Pattern)

模板设计模式(Template Method Pattern)
Mozi模板设计模式(Template Method Pattern)
模板设计模式是一种行为型设计模式,其核心思想是 定义一个算法的骨架,将某些步骤延迟到子类中实现,从而使得子类可以在不改变算法整体结构的情况下,重新定义某些步骤的具体逻辑。
一、核心思想与要点
核心思想
模板设计模式的核心是 固定算法流程,延迟实现细节。通过在父类中定义算法的主要步骤,子类只需实现具体的细节逻辑即可。
核心要点
- 固定流程:父类定义算法的主要步骤(如“烧水 → 冲泡 → 倒入杯子 → 加调料”)。
- 可变细节:子类实现具体的步骤(如“如何冲泡茶叶”或“加什么调料”)。
- 控制反转:父类控制流程,子类填充细节。
二、Java 实现模板模式的步骤
1. 定义抽象类(模板类)
- 模板方法:用
final
修饰,定义算法的流程(防止子类覆盖流程)。 - 抽象方法:用
abstract
修饰,表示必须由子类实现的方法。 - 具体方法:父类提供默认实现的方法(如公共步骤)。
- 钩子方法(可选):提供默认逻辑的方法,子类可选择性覆盖(用于控制流程分支)。
1 | public abstract class AbstractClass { |
2. 定义具体子类
子类继承抽象类,并实现其抽象方法。可以覆盖钩子方法以改变流程。
1 | public class ConcreteClassA extends AbstractClass { |
3. 使用模板模式
通过调用模板方法触发算法流程:
1 | public class Client { |
输出结果:
1 | 执行步骤1 |
三、模板模式的优缺点
优点
- 复用性高:将通用的算法逻辑封装在父类中,减少代码重复。
- 扩展性强:子类可以通过实现抽象方法或覆盖钩子方法来扩展功能。
- 控制流程:父类控制整体流程,子类只需关注具体实现。
缺点
- 类间耦合性高:父类与子类之间存在较强的依赖关系。
- 灵活性受限:算法流程被固定,子类只能在既定框架内扩展。
四、适用场景
- 固定流程但部分步骤可变:如制作饮料(固定流程:烧水 → 冲泡 → 倒入杯子 → 加调料)。
- 需要控制子类行为:通过钩子方法控制流程分支。
- 算法稳定但实现细节多变:如数据处理流程(固定步骤:读取数据 → 处理数据 → 保存数据)。
附录
1. 钩子方法的作用
钩子方法是模板模式中的一个重要特性,用于控制流程分支。其默认实现通常返回一个布尔值,子类可以选择性覆盖以改变流程。
示例:
1 | protected boolean hookMethod() { |
2. 相关设计模式对比
- 策略模式:通过组合的方式动态选择算法。
- 模板模式:通过继承的方式固定算法流程,延迟实现细节。
3. 参考资料
- 《设计模式:可复用面向对象软件的基础》
- 模板方法模式 - 菜鸟教程
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果