設計模式學習(八) 模板方法模式

2021-09-11 19:01:43 字數 1261 閱讀 9067

這是個人學習程式設計模式的系列學習筆記第八篇。

採用qt creator進行編寫,但盡量採用c++基礎語法。

模板方法模式(template method)定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。 使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。

如果有乙個場景,從高層次來看,基本步驟都差不多,分為固定的幾步,但每步的具體實現在底層又略有區別,就可以考慮用模板方法模式。

比如做點心(又是點心?),各種點心的製作步驟基本類似,都是準備材料、和面、發酵、成型然後烘焙,但不同點心的配料、烘焙等具體操作不同,這樣的情況就可以用模板方法。

請注意模板方法模式和策略模式的區別。策略模式是不同的策略實現相同的演算法。這兩者如果結合引用,應該是在實現算法子類的時候,可以引用策略模式對不同的子類演算法實現不同演算法策略。

這次不用點心作為例子了。考慮乙個著名的哲學問題。

問:把大象放進冰箱,攏共分幾步?

答:攏共分三步:第一步開啟冰箱;第二步:把大象放進去;第三步:關上冰箱門。

在具體放大象的過程**現問題了,因為大象分非洲象、亞洲象、還有猛獁象等。為了示例簡單,就只考慮大象不同,冰箱都一樣(因為能裝下大象的冰箱,估計就一種)

放大象的過程是一樣的(演算法骨架),具體每一步的過程不太一樣(根據不同的大象實現不同的步驟)。

定義乙個問題類作為演算法骨架,在派生類中實現不同大象放入冰箱的差異行為。相同的動作部分在問題類中完成,派生類只定義不同的內容。

設計模式學習(八)模板方法模式

在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。別呼叫我們,我們會呼叫你。也就是高層元件來決定什麼時候呼叫低層元件。我們需要製作咖啡和茶。咖啡的製作步驟 1.把水煮沸 2.用沸水沖泡咖啡 3.把咖啡倒入杯子 4....

設計模式(八) 模板方法模式

設計模式 八 模板方法模式 這幾天雜七雜八的事有點多,停了幾日,今日繼續,今天講最簡單的模板方法,但是卻是用的比較廣泛的。首先來明確下概念吧,模板方法的寫法是這樣,準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式...

設計模式(八)模板方法模式

它的定義為 定義乙個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變乙個演算法的結構即可重新定義該演算法的某些特定步驟。說的通俗一點,就是為子類設計乙個模板以便於子類復用裡面的方法。為了避免子類惡意修改方法的實現細節,一般模板方法模式都會在方法上加final。我們以泡茶和衝咖啡為例...