一、概述
定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
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)重要、複雜的算法,可以把核心算法設計爲模板方法,周邊的相關細節功能則由各個子類實現