模板方法模式在父类中确定整个流程中的顺序,并实现固定不变的步骤,而把不固定的步骤留给子类实现。甚至可以通过一个钩子方法,让子类来决定流程中某个方法的执行与否。
#include <stdio.h>
class CCourse
{
public:
CCourse(){}
virtual ~CCourse(){}
void MakeCourse()
{
MakePPT();
MakeVideo();
if (IsNeedWriteArticle())
{
WriteArticle();
}
ProvideCode();
}
void MakePPT()
{
printf("make PPT\n");
}
void MakeVideo()
{
printf("make video\n");
}
void WriteArticle()
{
printf("write article\n");
}
virtual bool IsNeedWriteArticle()
{
return false;
}
virtual void ProvideCode() = 0;
};
class CSPCourse : public CCourse
{
public:
CSPCourse(){}
virtual ~CSPCourse(){}
bool IsNeedWriteArticle()
{
return true;
}
void ProvideCode()
{
printf("Provide C++ code.\n");
}
};
class CTBCourse : public CCourse
{
public:
CTBCourse(){}
virtual ~CTBCourse(){}
bool IsNeedWriteArticle()
{
return false;
}
void ProvideCode()
{
printf("Provide Java code.\n");
}
};
template.cpp
#include "template.h"
int main(int argc, char* argv[])
{
CCourse* lpoCourse = new CSPCourse();
lpoCourse->MakeCourse();
delete lpoCourse;
lpoCourse = NULL;
CCourse* lpoCourse1= new CTBCourse();
lpoCourse1->MakeCourse();
delete lpoCourse1;
lpoCourse1 = NULL;
return 0;
};
类图如下所示