模版模式

標籤: 設計模式算法


引言數據庫

在模板方法模式中,將實現功能的每個步驟所對應的方法稱爲基本方法(例如「點單」、「吃東西」和「買單」),而調用這些基本方法同時定義基本方法的執行次序的方法稱爲模板方法(例如「請客」)。模板方法定義算法執行的骨架,子類繼承下來直接使用,通常用final修飾不容許子類修改。設計模式

抽象類的任務是搭建邏輯的框架,一般由經驗豐富的人員編寫,抽象類的好壞直接決定了程序是否穩定。框架

實現類用來實現細節。抽象類中的模板方法正是經過實現類擴展的方法來完成業務邏輯。只要實現類中的擴展方法經過了單元測試,在模板方法正確的前提下,總體功能通常不會出現大的錯誤。數據庫設計

類型單元測試

行爲型模式。測試

目的設計

算法的步驟先由抽象類裏面提供一個方法寫好,具體的細節延遲到子類實現。模板方法使得同一個算法的多個不一樣實現有一致的框架,而具體區別由子類控制。3d

UML類結構對象

角色

模板方法模式由一個抽象類和一個(或一組)實現類經過繼承結構組成,抽象類中的方法分爲三種:
(1)抽象方法:父類中只聲明但不加以實現,而是定義好規範,而後由它的子類去實現。
(2)模板方法:由抽象類聲明並加以實現。通常來講,模板方法調用抽象方法來完成主要的邏輯功能,而且,模板方法大多會定義爲final類型,指明主要的邏輯功能在子類中不能被重寫。
(3)鉤子方法:由抽象類聲明並加以實現。可是子類能夠去擴展,子類能夠經過擴展鉤子方法來影響模板方法的邏輯。例如使用返回布爾變量的方法來控制算法中某些步驟是否執行。

說明

模板模式是一種基於繼承的代碼複用技術。因爲模板方法是具體方法,所以模板方法模式中的抽象層只能是抽象類,而不是接口。

優點

(1)具體細節步驟實現定義在子類中,子類定義詳細處理算法是不會改變算法總體結構。

(2)代碼複用的基本技術,在數據庫設計中尤其重要。

(3)存在一種反向的控制結構,經過一個父類調用其子類的操做,經過子類對父類進行擴展增長新的行爲,符合「開閉原則」。

不足

每一個不一樣的實現都須要定義一個子類,會致使類的個數增長,系統更加龐大。

具體使用說明

(1)先寫一個抽象類,定義幾個基本方法,使用abstract修飾,而後定義一個模板方法,模板方法是具體方法,按照必定順序訪問自身的基本方法。

(2)寫一個或者多個繼承該抽象類的子類,實現全部基本方法便可。

(3)Client端直接調用抽象類類型的對象的模板方法,便可調用這個算法。修改算法具體實現時,只需修改子類或者新增一個子類便可,不用修改Client端的代碼。

相關文章
相關標籤/搜索