一、什麼是模板方法模式?
模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。
涉及到的角色:
抽象類(abstractclass):實現了模板方法,定義了演算法的骨架。
具體類(concreteclass):實現抽象類中的抽象方法,已完成完整的演算法。 類圖
**類:
abstractclass : 抽象類,定義並實現乙個模板方法。這個模板方法定義了演算法的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類去實現。頂級邏輯也有可能呼叫一些具體方法
abstract class abstractclass
}concreteclass : 實現實現父類所定義的乙個或多個抽象方法。
class concreteclassa extends abstractclass
@override
public void primitiveoperation2()
}class concreteclassb extends abstractclass
@override
public void primitiveoperation2()
} 測試**
public class templatemethodpattern
}二、模板方法模式優缺點
1、模板方法模式通過把不變的行為搬移到超類,去除了子類中的重複**。
2、子類實現演算法的某些細節,有助於演算法的擴充套件。
3、通過乙個父類呼叫子類實現的操作,通過子類擴充套件增加新的行為,符合「開放-封閉原則」。
4、每個不同的實現都需要定義乙個子類,這會導致類的個數的增加,設計更加抽象。
三、使用場景
模板方法可以用於一次性實現乙個演算法的不變的部分,並將可變的部分留給子類去實現;子類的公共**部分應該被提煉到父類中去寫好,防止**重複編寫;控制子類的擴充套件,模板方法只允許在特定點呼叫鉤子函式,這樣就只允許在這些點進行擴充套件。
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...
模板方法模式
模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...
模板方法模式
模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...