在模版方法模式中,通過在模版抽象類中定義一個操作的算法骨架,將一些步驟抽取封裝到具體的抽象方法中,強迫子類進行按需要重寫實現方法,這樣使得在使用的時候,子類可以不改變算法結構即可重新定義算法的特定步驟。模版方法模式是基於繼承代碼複用的基本技術。
模版方法模式結構
模版方法模式UML
模版方法模式涉及的角色
抽象模板角色(AbstractTemplate):抽象模版類,用來定義算法的基本骨架,同時定義一個或多個抽象操作,這些操作由子類進行實現。
具體模板角色(ConcreteTemplate):具體模板角色,用來實現算法骨架中的某些步驟,完成與特定子類相關的功能。
案例演示
這裡我們以登錄作為一個演示的例子,我們都知道,登錄模塊有會員登錄和普通用戶登錄,這兩塊在登錄權限處理上有所不同。
定義抽象模版登錄模塊
定義具體的模板方法類
根據權限角色不同,登錄的方法有所區別,即子類重寫父類預留的模板方法。
客戶端
執行結果
通過上面的例子,我們可以看到,模板方法的核心就是固定算法的骨架結構,它的UML圖跟策略模式非常相似,本質上這兩種模式還是有很大差異的。策略模式側重的不同的策略,模板方法模式側重的是某個處理流程中的關鍵節點代碼不確定,範圍比策略模式小。
模板方法中的方法
根據上面的介紹,模板方法中的方法可以分為兩大類:模板方法和基本方法。
模板方法
一個模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。
一個抽象類可以有任意多個模板方法,而不限於一個。每一個模板方法都可以調用任意多個具體方法。
基本方法
模板方法優缺點
優點
良好的複用性,通過將公共的方法集中在模板類中,將公共不同部分抽取出來放到子類中實現達到複用的效果。
擴展性比較好,封裝不變的,擴展可變部分。
易於維護
缺點
骨架固定,升級不易。
閱讀更多 Andoter的學習筆記 的文章