1.模板方法模式概述
1.1、意圖
定義一個操作中的算法骨架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定 義該算法的某些特定步驟。
1.2、適用性
- 一次性實現一個算法的不變部分,並將可變的行爲留給子類來實現。
- 各子類中公共行爲應被提取出來並集中到一個公共父類中,避免代碼重複。
- 需要子類的返回結果來決定父類中的某些步驟是否執行。
1.3、結構圖
- 父類AbstractClass的TemplateMethod()方法決定了算法步驟和部分步驟實現過程。
- 子類ConcreteClass重寫PrimitiveOperation1()和PromitiveOperation2()實現特定的步驟內容。
2.代碼示例
//基類
class GotoWork {
public:
GotoWork() {}
virtual ~GotoWork() {}
void getUp() {
std::cout << "起牀" << std::endl;
}
virtual void eatBreakfast() {
std::cout << "喫豆漿油條" << std::endl;
}
virtual void gotoWork() {
std::cout << "坐公交上班" << std::endl;
}
void startWorking() {
std::cout << "開始工作" << std::endl;
}
public:
void gotoWorkProcess() {
getUp();
eatBreakfast();
gotoWork();
startWorking();
}
};
//子類
class MyGotoWork : public GotoWork {
public:
virtual void eatBreakfast() {
std::cout << "喫包子" << std::endl;
}
virtual void gotoWork() {
std::cout << "開車上班" << std::endl;
}
};
//測試
int main()
{
GotoWork *work = new MyGotoWork();
work->gotoWorkProcess();
system("pause");
return 0;
}
輸出結果: