C++23種設計模式(一)--Template Method(模板方法)

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;
}

輸出結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章