模板方法(Template Method)

模板方法属于 设计模式::行为模式 的一种,特别的,属于 行为类模式

行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述他们之间的通信模式(协作)。

行为模式分为两种:

  • 行为类模式:使用继承机制在类间分配行为
  • 行为对象模式:使用对象复合而不是继承。

一言以蔽之

类库中使用虚函数留下接口,子类继承时重写虚接口,实现晚绑定。

建议:

  1. 类库中的虚函数应使用纯虚函数,且放在 protected
  2. 命名:纯虚函数使用 Do- 前缀

举例

class Library {
public:
	// Run是一个稳定的接口
	Run() {
		// First Step
		if (Open())	Read();

		// Second Step
		DoModify();

		// Finale
		Close();
	}

	int Open();
	int Read();
	int Close();
protected:
	virtual void DoModify() = 0;  // 自定义行为
}

class Application : public Library {
public:
	// 修改父类行为,实现晚绑定
	void DoModify() override {  
		// ....
	}
};

int main()
{
	// 使用子类实例化父类对象,使用父类接口
	Library* lib = new Application;
	// ....
}

其中Run()被称为模板方法

一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体的行为。

模板方法是一个稳定的接口,而protected区的行为是变化的,因此此模式不适合应用于不稳定的接口

相关模式

  1. 工厂方法(Factory Method)
  2. 策略(Strategy)