定义一个操作中的算法骨架(稳定的),而将一些步骤的实现延迟到子类中(变化的)。模板方法使得子类可以复用一个算法的结构,而只改变(重写)这个算法的特定步骤。
class Library { public: virtual ~Library() {} // template method void run() { step1(); step2(); step3(); } protected: virtual void step1() = 0; virtual void step2() = 0; void step3() { // stable method, do something } }; class ConcretLibrary : public Library{ protected: void step1() { // do something } void step2() { // do something } }; void main() { ConcretLibrary lb; lb.run(); }
对比类图和C++实现,其中TemplateMethod就是模板方法,它是子类可以复用的算法结构。对于特定步骤step1、step2他们都是变化的,所以延迟到子类进行实现。