模板方法模式:定義乙個操作中演算法的框架,而將一些步驟延遲到子類。模板方法模式使得子類可以不改變乙個演算法的結構,即可重定義該演算法的某些特定步驟。
模板方法模式是結構最簡單的行為型設計模式,在其結構中只存在父類與子類之間的繼承關係。通過使用模板方法模式,可以將一些複雜流程的實現步驟封裝在一系列基本方法中,在抽象父類中提供乙個稱之為模板方法的方法來定義這些基本方法的執行次序,而通過其子類來覆蓋某些步驟,從而使得相同的演算法框架可以有不同的執行結果。模板方法模式提供了乙個模板方法來定義演算法框架,而某些具體步驟的實現可以在其子類中完成
模板方法模式的結構圖如下:
由上圖可知,模板方法模式包含下面兩個角色:
(1) abstractclass(抽象類):在抽象類中定義了一系列基本操作(primitiveoperations),這些基本操作可以是具體的,也可以是抽象的,每乙個基本操作對應演算法的乙個步驟,在其子類中可以重定義或實現這些步驟。同時,在抽象類中實現了乙個模板方法(template method),用於定義乙個演算法的框架,模板方法不僅可以呼叫在抽象類中實現的基本方法,也可以呼叫在抽象類的子類中實現的基本方法,還可以呼叫其他物件中的方法。
(2) concreteclass(具體子類):它是抽象類的子類,用於實現在父類中宣告的抽象基本操作以完成子類特定演算法的步驟,也可以覆蓋在父類中已經實現的具體基本操作。
下面是運用模板方法模式寫的**:
#include using namespace std ;
class teacher_question //老師提出來的問題
virtual void answer() };
class studenta : public teacher_question //學生a的作答
執行後:
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...
模板方法模式
模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...
模板方法模式
模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...