一項任務,有穩定的整體結構和多邊的子步驟。可以使用模板方法(Template Method)。
定義
模板方法,定義一個操作中的算法骨架,而將一些步驟延遲到子類,使得子類可以不改變一個算法的結構,但可以重定義該算法的某些特定步驟。
實例
函數Run()是類庫中的框架函數供外部調用。Step1() 和Step2()在類庫中已經實現,Step3()需要用戶在子類中實現。
#include<iostream>
using namespace std;
class Library
{
public:
void Run()
{
Step1();
Step2();
Step3();
}
//析構函數需要是虛函數
virtual ~Library(){ }
protected:
void Step1() { }
void Step2() { }
virtual void Step3() = 0;
};
class Application : public Library
{
public:
virtual void Step3() override { }
};
int main()
{
Library* pLib = new Application();
pLib->Run();
delete pLib;
}
總結
模板方法是很基礎的設計模式,它用最簡單的機制實現代碼複用。
“不要調用我,讓我來調用你”的反向控制結構是模板方法的典型應用。