//TemplateMethod模式
class AbstractClass
{
public:
AbstractClass(){}
virtual ~AbstractClass(){}
//定义了算法的轮廓
void TemplateMethod(){PrimitiveOperation1();PrimitiveOperation2();}
protected:
// 纯虚函数,由派生类实现之
virtual void PrimitiveOperation1() = 0;
virtual void PrimitiveOperation2() = 0;
};
class ConcreateClassA: public AbstractClass
{
public:
ConcreateClassA(){}
virtual ~ConcreateClassA(){}
protected:
void PrimitiveOperation1(){printf("this is a ConcreateClassA PrimitiveOperation1!\n");}
void PrimitiveOperation2(){printf("this is a ConcreateClassA PrimitiveOperation2!\n");}
};
class ConcreateClassB: public AbstractClass
{
public:
ConcreateClassB(){}
virtual ~ConcreateClassB(){}
protected:
void PrimitiveOperation1(){printf("this is a ConcreateClassB PrimitiveOperation1!\n");}
void PrimitiveOperation2(){printf("this is a ConcreateClassB PrimitiveOperation2!\n");}
};
//TemplateMethod模式
int _tmain(int argc, _TCHAR* argv[])
{
AbstractClass* pConcreateClassA = new ConcreateClassA;
pConcreateClassA->TemplateMethod();
AbstractClass* pConcreateClassB = new ConcreateClassB;
pConcreateClassB->TemplateMethod();
delete pConcreateClassA;
delete pConcreateClassB;
getchar();
return 0;
}
转载于:https://my.oschina.net/u/221120/blog/890187