作用:
定义一个操作中的算法的骨架, 而将一些步骤延迟到子类中。 TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
嗯,还是以鸡腿为例来说一下这个方法。
啃得鸡现在要炸鸡腿,炸鸡腿呢我们就把它当做是个模板,怎么炸?当然不同的口味有不同的炸法嘛;因此我们在炸各种口味的鸡腿就可以在派生类里实现了嘛。
看一个例子:
#include<iostream>
using namespace std;
//抽象基类,定义算法的轮廓
class Chicken
{
public:
Chicken(){}
virtual ~Chicken(){}
//这个函数中定义了算法的轮廓
void TemplateMethod()
{
ChickenA();
ChickenB();
}
protected:
//纯虚函数;由派生类实现之
virtual void ChickenA()=0;
virtual void ChickenB()=0;
};
//继承自Chicken,实现算法
class KFCChicked:public Chicken
{
public:
KFCChicked(){}
virtual ~KFCChicked(){}
protected:
virtual void ChickenA()
{
cout<<"KFC油炸麻辣味鸡腿..."<<endl;
}
virtual void ChickenB()
{
cout<<"KFC油炸芝士味鸡腿..."<<endl;
}
};
//继承自Chicken,实现算法
class MCDChicked:public Chicken
{
public:
MCDChicked(){}
virtual ~MCDChicked(){}
protected:
virtual void ChickenA()
{
cout<<"MCD油炸麻辣味鸡腿..."<<endl;
}
virtual void ChickenB()
{
cout<<"MCD油炸芝士味鸡腿..."<<endl;
}
};
int main()
{
Chicken* pKfc = new KFCChicked();
Chicken* pMcd = new MCDChicked();
pKfc->TemplateMethod();
pMcd->TemplateMethod();
delete pKfc;
delete pMcd;
return 0;
}
看看,是不是很想吃。说的我都流口水了。