Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法(模板方法)中的某些必要的处理委让给抽象方法(模板类父类中的纯虚函数),通过子类对抽象方法的不同实现,改变整个算法的行为。
也就是说,通过子类重写父类虚函数,在保证总体大局,总体步骤不变的情况下,每一个小步骤的具体算法行为可以改变,最终实现接口不变。
角色和职责
案例
#include <iostream>
using namespace std;
/*抽象模板类--含有模板方法*/
class MakeCar
{
public:
/*微观上的算法--很细节的东西*/
virtual void MakeHead() = 0;
virtual void MakeBody() = 0;
virtual void MakeTail() = 0;
void Make()//模板函数吧业务逻辑确定好了!--模板方法
{
MakeTail();
MakeBody();
MakeHead();
}
};
/*具体模板类--里面重写了父类的纯虚函数--表现为微观算法的不同*/
class Jeep:public MakeCar
{
public:
virtual void MakeHead()
{
cout<<"jeep head"<<endl;
}
virtual void MakeBody()
{
cout<<"jeep body"<<endl;
}
virtual void MakeTail()
{
cout<<"jeep tail"<<endl;
}
};
/*具体模板类--里面重写了父类的纯虚函数--表现为微观算法的不同*/
class Bus:public MakeCar
{
public:
virtual void MakeHead()
{
cout<<"bus head"<<endl;
}
virtual void MakeBody()
{
cout<<"bus body"<<endl;
}
virtual void MakeTail()
{
cout<<"bus tail"<<endl;
}
};
/*测试案例*/
int main271()
{
/*抽象模板类--为了使用多态的特性*/
MakeCar * car1 = new Bus;//具体模板类--对应一种具体算法
car1->Make();//调用通用的模板方法完成任务
delete car1;
MakeCar * car2 = new Jeep;//具体模板类--对应一种具体算法
car2->Make();//调用通用的模板方法完成任务
delete car2;//内存回收
return 0;
}