模板模式又叫做模板方法模式,是行为模式之一。它把具有特定步骤算法中的某些必要的处理委让给抽象方法,然后通过子类继承实现对抽象方法的不同实现从而改变整个算法的行为。即先制定一个顶级的逻辑框架,而将逻辑的具体实现细节交给具体的子类来实现。
例如:制作汽车都需要三个步骤:制作车头->制作车身->制作车尾。但是对于JEEP车,需要的顺序相同,但细节不同,JEEP车顺序为:制作JEEP车头->制作JEEP车身->制作JEEP车尾。而对于大众车也是这三个步骤,细节也不同:制作大众车头->制作大众车身->制作大众车尾。
优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
类图如下:
示例代码如下:
#include <iostream>
using namespace std;
class MakeCar
{
public:
virtual void MakeHead() = 0;
virtual void MakeBody() = 0;
virtual void MakeTail() = 0;
public:
void Make() //模板函数 把业务逻辑给做好
{
MakeHead();
MakeBody();
MakeTail();
}
};
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;
}
};
void main()
{
MakeCar *car = new Bus;
car->Make();
delete car;
cout<< endl;
MakeCar *car2 = new Jeep;
car2->Make();
delete car2;
system("pause");
return;
}
运行结果如下: