Template Method
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模式方法使得子类可以不改变一个算法的结构即可重定义该算法的特定步骤。
在某一项任务中,有稳定的整体操作结构,但是各个子步骤间有很多改变的需求。
先找稳定点 扩展变化点
#include <iostream>
using namespace std;
class Library{
public:
void run(){ //稳定的算法骨架 完成这样的一个流程
step1();
step2();
step3();
step4();
step5();
}
virtual ~Library(){} //析构函数声明成虚函数
private: //主函数只实现对固有不变的步骤进行声明 对于用户进行隔离,声明成私有
void step1(){cout<<"主函数使用step1"<<endl;}
void step3(){cout<<"主函数使用step3"<<endl;}
void step4(){cout<<"主函数使用step4"<<endl;}
protected: //对于子类开放将虚函数声明成可保护
virtual void step2() = 0;
virtual void step5() = 0;
};
class Application : public Library{
protected:
virtual void step2(){
cout<<"子函数使用step2"<<endl;
}
virtual void step5(){
cout<<"子函数使用step5"<<endl;
}
};
int main(){
Library *p = new Application(); //多态指针 父类指针指向子类对象
p->run();
return 0;
}
对于固有程序封装在父类中,可变的步骤放入子类中进行重写,同时,运行时是父类对象执行主函数流程,这种思想叫做晚绑定。
晚的东西调用早的东西 :早绑定
早的东西调用晚的东西:晚绑定