设计模式之模板方法
Template Method(模板方法)
1. 意图
定义一个操作中算法的骨架,将一些 步骤延迟到子类中,Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。
2. 动机
考虑一个提供Application和Document类的应用框架。Application类负责打开一个已有外部存储形式的文档,如一个文件。一旦一个文件的信息从该文件中读取之后,它就由一个Document对象表示。

我们称OpenDocument方法为一个模板方法(template method),一个模板方法用抽象的操作定义一个算法,而子类重定义这些操作以提供具体的行为。Application的子类将定义检查一个文档能否被打开(CanOpenDocument)和创建文档(DoCreateDocument)的具体算法步骤。Document子类MyDocument则定义读取文档的算法步骤(DoRead)。
通过使用抽象操作定义算法中的一个或几个步骤,模板方法确定了它们的先后顺序,但它允许Application和Document子类改变这些步骤以满足各自的需求。
3. 适用性
一次性实现算法中不变的部分,将可变的部分交给子类实现
各子类中的公共行为应被提取并集中到父类中以避免代码重复
子类的扩展受父类控制
4. 结构

5. 协作
ConcreteClass靠AbstractClass实现算法中不变的步骤
6. 效果
模板方法是一种代码复用的基本技术,在类库中尤为重要,其提供了类库的公共行为。模板方法导致一种反向的控制结构,“好莱坞法则",“别找我们,我们找你”,指父类调用子类的操作,而不是相反。
7. 实践
非常常见的设计模式,通过父类定义框架,子类来填充
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述