模板方法模式是一種行為型設計模式,它定義了一個操作的算法骨架,將一些步驟延遲到子類中實現。這樣,子類可以在不改變算法結構的前提下,重定義算法中的某些特定步驟。模板方法模式的主要組成部分包括:
抽象父類(AbstractClass):
定義了算法的骨架,包括抽象的原語操作和具體的模板方法。
模板方法不僅調用原語操作,也可能調用定義在AbstractClass或其他對象中的操作。
具體子類(ConcreteClass):
實現原語操作以完成算法中與特定子類相關的步驟。
可以重寫所有步驟,但不能重寫模板方法自身。
模板方法模式的套用場景包括:
當多個類的算法除了一些細微不同之外幾乎完全一樣時,可以使用該模式來去除重複代碼。
當只希望客戶端擴展某個特定算法步驟,而不是整個算法或其結構時,可以使用模板方法模式。
模板方法模式的優點包括:
提取了類庫中的公共行為,通過子類來實現不同的行為,鼓勵恰當使用繼承來實現代碼復用。
可以實現一種反向控制結構,通過子類覆蓋父類的鈎子方法。
模板方法模式遵循的原則包括:
開閉原則:功能的擴展對修改關閉,對擴展開放。
依賴倒置原則:父類的實現依賴底層的接口,而不是依賴具體的實現細節。
與模板方法模式相關的設計模式包括工廠方法模式和策略模式。工廠方法模式是模板方法模式的特殊情況,使用子類來產生對象實例。策略模式會切換整個算法,而不是修改算法中某一步驟的實現方式。