模板方法(Template Method)
模板方法属于 设计模式::行为模式 的一种,特别的,属于 行为类模式。
行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述他们之间的通信模式(协作)。
行为模式分为两种:
- 行为类模式:使用继承机制在类间分配行为。
- 行为对象模式:使用对象复合而不是继承。
一言以蔽之
类库中使用虚函数留下接口,子类继承时重写虚接口,实现晚绑定。
建议:
- 类库中的虚函数应使用纯虚函数,且放在
protected区 - 命名:纯虚函数使用
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区的行为是变化的,因此此模式不适合应用于不稳定的接口。
相关模式
- 工厂方法(Factory Method)
- 策略(Strategy)