模板方法模式和C++模板一点关系都没有。
模板方法确立了其实现的整体架构,同时将部分实现延迟到派生类中进行。通常来说,Template Method为一个公有的非虚拟函数,它调用被保护的虚函数。派生类必须接受它所继承的非虚基类函数所指明的全部实现,同时还可以通过重写该公有函数所调用的被保护的虚函数,以有限的方式来定制其行为。
eg.
class App
{
public:
virtual ~App();
void startup() //Template Method
{
initialize();
if(!validate())
altInit();
}
protected:
virtual bool validate() const = 0;
virtual void altInit();
private:
void initialize();
}
class MyApp : public App
{
public:
private:
bool validate() const;
void altInit();
//...
}