設計模式——模版方法模式

設計模式——模版方法模式

在模版方法模式中,通過在模版抽象類中定義一個操作的算法骨架,將一些步驟抽取封裝到具體的抽象方法中,強迫子類進行按需要重寫實現方法,這樣使得在使用的時候,子類可以不改變算法結構即可重新定義算法的特定步驟。模版方法模式是基於繼承代碼複用的基本技術。

模版方法模式結構

模版方法模式UML

設計模式——模版方法模式

模版方法模式涉及的角色

  • 抽象模板角色(AbstractTemplate):抽象模版類,用來定義算法的基本骨架,同時定義一個或多個抽象操作,這些操作由子類進行實現。

  • 具體模板角色(ConcreteTemplate):具體模板角色,用來實現算法骨架中的某些步驟,完成與特定子類相關的功能。

案例演示

這裡我們以登錄作為一個演示的例子,我們都知道,登錄模塊有會員登錄和普通用戶登錄,這兩塊在登錄權限處理上有所不同。

定義抽象模版登錄模塊

設計模式——模版方法模式

定義具體的模板方法類

設計模式——模版方法模式

根據權限角色不同,登錄的方法有所區別,即子類重寫父類預留的模板方法。

客戶端

設計模式——模版方法模式

執行結果

設計模式——模版方法模式

通過上面的例子,我們可以看到,模板方法的核心就是固定算法的骨架結構,它的UML圖跟策略模式非常相似,本質上這兩種模式還是有很大差異的。策略模式側重的不同的策略,模板方法模式側重的是某個處理流程中的關鍵節點代碼不確定,範圍比策略模式小。

模板方法中的方法

根據上面的介紹,模板方法中的方法可以分為兩大類:模板方法基本方法

模板方法

  • 一個模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。

  • 一個抽象類可以有任意多個模板方法,而不限於一個。每一個模板方法都可以調用任意多個具體方法。

基本方法

模板方法優缺點

優點

  • 良好的複用性,通過將公共的方法集中在模板類中,將公共不同部分抽取出來放到子類中實現達到複用的效果。

  • 擴展性比較好,封裝不變的,擴展可變部分。

  • 易於維護

缺點

  • 骨架固定,升級不易。


分享到:


相關文章: