一、概述
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
AbstractClass叫做抽象模板,它的方法分为两类:
(1)原始方法,是由子类实现的方法,并且在模板方法被调用
(2)模板方法,可以有一个或几个,实现对原始方法的调度,完成固定的逻辑
class AbstractClass
{
public:
virtual void PrimitiveOperation1();
virtual void PrimitiveOperation2();
void TemplateMethod()
{
PrimitiveOperation1();
//完成相关逻辑
PrimitiveOperation2();
}
};
class ConcreteClass1 : public AbstractClass
{
public:
virtual void PrimitiveOperation1()
{
//do something
}
virtual void PrimitiveOperation2()
{
//do something
}
};
class ConcreteClass2 : public AbstractClass
{
public:
virtual void PrimitiveOperation1()
{
//do something
}
virtual void PrimitiveOperation2()
{
//do something
}
};
二、使用场景
(1)多个子类有共有的方法,并且逻辑基本相同时
(2)重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现