模板方法[❤❤❤]
最后更新于:2022-04-02 04:21:34
[TOC]
## 概述
**模板方法模式**是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。
- 某些步骤可在基类中直接实现。
- 某些可定义为抽象类型。
- 模板方法定义了某个算法的框架
- 一个类可包含多个模板方法
## 问题
该程序的首个版本仅支持 DOC 文件。在接下来的一个版本中,程序能够支持 CSV 文件。一个月后,你“教会”了程序从 PDF 文件中抽取数据。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/fe/90/fe9001a5f036c1cb4bb5ff186f56ceef_1240x920.png)
## 模式结构
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c0/38/c038fae158248955c4d5446724d2ac91_680x760.png)
1. **抽象类**(AbstractClass)会声明作为算法步骤的方法,以及依次调用它们的实际模板方法。算法步骤可以被声明为`抽象`类型,也可以提供一些默认实现。
2. **具体类**(ConcreteClass)可以重写所有步骤,但不能重写模板方法自身。
## 应用场景
1. 当你只希望客户端扩展某个特定算法步骤, 而不是整个算法或其结构时, 可使用模板方法模式。
2. 当多个类的算法除一些细微不同之外几乎完全一样时, 你可使用该模式。 但其后果就是, 只要算法发生变化, 你就可能需要修改所有的类。
';