模版模式
定义:又叫模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情冴下,重新定 义算法中的某些步骤。
举例:
例如,生产汽车的工厂,生产一辆车,一般都包含造车头、造车身、造车尾等几个步骤,通常情况下这几个步骤的次序是:造车头 -->造车身-->造车尾。在这三个步骤中,无论造什么车,汽车,公交车等等,可能不同的车造车头的方法不一样,但一般都遵循这个步骤。
应用场景:
在软件开发中,有时也会遇到类似的情况,某个方法的实现需要多个步骤(类似“造车”),其中有些步骤是固定的(类似造车的步骤),而有些过程并不固定,存在可变性。为了提高代码的复用性和系统的灵活性,可以使用一种称之为模板方法模式的设计模式来对这类情况进行设计,在模板方法模式中,将实现功能的每一个步骤所对应的方法称为基本方法(例如“早车头”),而调用这些基本方法同时定义基本方法的执行次序的方法称为模板方法(例如“造车”)。通过使用模板方法模式,一方面提高了代码的复用性,另一方面还可以利用面向对象的多态性,在运行时选择一种具体子类,实现完整的“造车”方法,提高系统的灵活性和可扩展性。
模板模式的类结构图:
兑现代码:
#include <iostream>
using namespace std;
class MakeCar
{
public:
virtual void MakeHead()=0;
virtual void MakeBody()=0;
virtual void MakeTail()=0;
public:
virtual void Make()
{
this->MakeTail();
this->MakeBody();
this->MakeHead();
}
};
class MakeJeep:public MakeCar
{
public:
virtual void MakeHead()
{
cout<<"make jeep head"<<endl;
}
virtual void MakeBody()
{
cout<<"make jeep body"<<endl;
}
virtual void MakeTail()
{
cout<<"make jeep tail"<<endl;
}
};
class MakeBus:public MakeCar
{
public:
virtual void MakeHead()
{
cout<<"make bus head"<<endl;
}
virtual void MakeBody()
{
cout<<"make bus body"<<endl;
}
virtual void MakeTail()
{
cout<<"make bus tail"<<endl;
}
};
void main()
{
MakeCar *car = new MakeBus;
car->Make();
car = new MakeJeep();
car->Make();
delete car;
system("pause");
}