http://www.cnblogs.com/jiese/p/3180477.html
模板模式
特点:在抽象类中抽象出统一的一套操作步骤,里面有一个模板函数,它提前将业务逻辑制定好,即各个子函数的调用顺序提前规定好。但是这里只是含有各个子函数的逻辑申明,而各个子函数的具体实现是在其各个子类中实现的。
角色:
AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶层逻辑的骨架,而逻辑的组成步骤(子函数)在相应的抽象操作中,而其实现推迟到子类中实现。顶层逻辑也有可能调用一些具体方法。
ConcreteClass,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
class MakeCar{
public:
virtual void MakeHead()=0;
virtual void MakeBody()=0;
virtual void MakeTail()=0;
void Make(){ //模板函数,里面提前规定好各个子函数的调用顺序
MakeTail();
MakeBody();
MakeHead();
}
};
class MakeJeep:public MakeCar{
public:
void MakeHead(){//各个子函数的具体实现
cout<<"make the head of jeep"<<endl;
}
void MakeBody(){
cout<<"make the body of jeep"<<endl;
}
void MakeTail(){
cout<<"make the tail of jeep"<<endl;
}
};
class MakeBM:public MakeCar{
public:
void MakeHead(){//各个子函数的具体实现
cout<<"make the head of BM."<<endl;
}
void MakeBody(){
cout<<"make the body of BM."<<endl;
}
void MakeTail(){
cout<<"make the tail of BM."<<endl;
}
};
int main(){
MakeCar* make_car=new MakeJeep;
make_car->Make();
delete make_car;
make_car=new MakeBM;
make_car->Make();
delete make_car;
return 0;
}