官方定义:
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
自己的思考:
模板方法是把一个确定不变的行为过程转移到基类,并在基类中定义确定的行为步骤,将不确定的行为利用虚函数机制,在子类中进行覆写(override),从而实现不变行为的代码复用,(早绑定 vs 晚绑定)。
UML类图:
代码实现:
#include<iostream>
//库函数,函数底层代码块
class Library {
protected:
void Step1() {
//代码实现(稳定的);
};
void Step3() {
//代码实现(稳定的);
}
void Step5() {
//代码实现(稳定的);
}
virtual bool Step2() = 0; //可变不稳定的,将实现延迟到子类中
virtual void Step4() = 0; //可变不稳定的,将实现延迟到子类中
public:
// 算法的骨架,流程是确定的
void Methed() {
Step1();
if (Step2())
Step3();
Step4();
for (int i = 0; i < 4; i++)
Step5();
}
//基类解析函数定义为虚函数,目的是正确调用派生类析构顺序
virtual ~Library() {}
};
//应用程序块
class Aplication:public Library {
protected:
virtual bool Step2() {
//代码实现
}
virtual void Step4() {
//代码实现
}
};
int main() {
Library* test = new Aplication;
test->Methed();
delete test;
return 0;
}