模板方法模式
1、模板方法模式简介
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2、模板模式和策略模式区别
策略模式:定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。关键点在于每个算法都是过程完整且独立的。
模板方法模式:模板则是将骨架定义好,例如执行的步骤或先后顺序。骨架中的部分在父类中进行实现,而子类的个性化行为则由子类继承再加以实现。
区别的本质就是策略模式是替换了整个流程。而模板模式替换的是固定流程中的一些特定的内容。
3、实例说明
平吃饭前肯定会先刷牙。那么可以将这个固定的流程(执行顺序确定)在基类中进行实现,而具体的细节,用什么牙刷刷牙,吃的什么饭可以不同,那么这些不同的部分就可以放到不同的子类中加以实现。
//抽象类,骨架的实现及行为定义
class BaseClass
{
public:
BaseClass();
~BaseClass();
//实现具体的执行顺序,具体方法由子类实现
void ExecuteSequence()
{
this->BrushTeeth();
this->Eat();
}
virtual void BrushTeeth()=0;
virtual void Eat()=0;
};
//具体执行过程A
class MethodA : public BaseClass
{
public:
MethodA();
~MethodA();
//实现基类定义的抽象行为
virtual void BrushTeeth()
{
cout << "用普通牙刷刷牙后" << endl;
}
virtual void Eat()
{
cout << "吃炒米饭" << endl;
}
};
//具体执行过程B
class MethodB : public BaseClass
{
public:
MethodB();
~MethodB();
//实现基类定义的抽象行为
virtual void BrushTeeth()
{
cout << "用电动牙刷刷牙后" << endl;
}
virtual void Eat();
{
cout << "吃包子" << endl;
}
};
int main()
{
BaseClass* PBase = new MethodA();
PBase->ExecuteSequence();//用普通牙刷刷牙后吃炒米饭
PBase = new MethodB();
PBase->ExecuteSequence();//用电动牙刷刷牙后吃包子
return 0;
}