Template Method属于组件协作模式。 组件写作模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。 典型模式:Template Method、Observer / Event、Strategy
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(重写)该算法的某些特定步骤。
背景:对于应用程序的开发,一般是先创建Library,再创建Application,然后按照固定的步骤开始运行。
class Library { public: void step1() { cout << "step1" << endl; } void step3() { cout << "step3" << endl; } }; class Application { public: void step2() { cout << "step2" << endl; } void step4() { cout << "step4" << endl; } }; int main() { Library lib; Application app; lib->step1(); app->step2(); lib->step3(); app->step4(); system("pause"); return 0; }
这是一种早绑定:先实现Library,实现的具体流程在Application中,具体流程的实现依赖于Library。
class Library { public: void run() { step1(); step2(); step3(); step4(); } protected: void step1() { cout << "step1" << endl; } void step3() { cout << "step3" << endl; } virtual void step2() = 0; virtual void step4() = 0; }; class Application : public Library { protected: virtual void step2() { cout << "step2" << endl; } virtual void step4() { cout << "step4" << endl; } }; int main() { Library *lib = new Application; lib->run(); system("pause"); return 0; }
这是一种晚绑定:先实现Library,Library中有实现流程,其中的流程依赖于较晚实现的Application。