談談模板方法設計模式的使用

在專案中經常會遇到一個類的某些方法和另一個類的某些方法功能是相同的,只有部分方法是不同的。這個時候就可以使用模板方法來操作了。其實這種情況很常見:比如我們專案裡面用到的基類,BaseActivity之類的。這種設計就是模板方法,是不是有點熟悉。。。下面來看看是怎麼實現的把。

模版方法模式的結構

模版方法模式由一個抽象類和一個(或一組)實現類透過繼承結構組成,抽象類中的方法分為三種:

抽象方法:

父類中只宣告但不加以實現,而是定義好規範,然後由它的子類去實現。

模版方法:

由抽象類宣告並加以實現。一般來說,模版方法呼叫抽象方法來完成主要的邏輯功能,並且,

模版

方法大多會定義為final型別,指明主要的邏輯功能在子類中不能被重寫。

鉤子方法:

由抽象類宣告並加以實現。但是子類可以去擴充套件,子類可以透過擴充套件鉤子方法來影響

模版

方法的邏輯。

抽象類的任務是搭建邏輯的框架,通常由經驗豐富的人員編寫,因為抽象類的好壞直接決定了程式是否穩定性。

實現類用來實現細節。抽象類中的

模版

方法正是透過實現類擴充套件的方法來完成業務邏輯。只要實現類中的擴充套件方法通過了單元測試,在

模版

方法正確的前提下,整體功能一般不會出現大的錯誤。

模版方法的優點

(一)容易擴充套件。一般來說,抽象類中的

模版

方法是不易反生改變的部分,而抽象方法是容易反生變化的部分,因此透過增加實現類一般可以很容易實現功能的擴充套件,符合開閉原則。

(二)便於維護。對於模版方法模式來說,正是由於他們的主要邏輯相同,才使用了模版方法,假如不使用

模版

方法,任由這些相同的程式碼散亂的分佈在不同的類中,維護起來是非常不方便的。

(三)比較靈活。因為有鉤子方法,因此,子類的實現也可以影響父類中主邏輯的執行。但是,在靈活的同時,由於子類影響到了父類,違反了里氏替換原則,也會給程式帶來風險。這就對抽象類的設計有了更高的要求。

模版方法的適用場景

在多個子類擁有相同的方法,並且這些方法邏輯相同時,可以考慮使用模版方法模式。在程式的主框架相同,細節不同的場合下,也比較適合使用這種模式。

示例示例1:下面程式碼示例說明

比如說使用glide載入圖片的時候,我可以寫一個抽象類來管理一些共性的東西,然後之內具體去實現,下面我寫一個抽象類:

第1步:先定義下載抽象類AbstractImageLoader

談談模板方法設計模式的使用

第2步: jpg下載類

談談模板方法設計模式的使用

第3步: webp下載類

談談模板方法設計模式的使用

第4步: 程式碼裡面使用

談談模板方法設計模式的使用

示例2:再來一個例項說明一下

第1步: 寫一個人類 抽象類

談談模板方法設計模式的使用

第2步: 學生類

談談模板方法設計模式的使用

第3步: 老師類

談談模板方法設計模式的使用

第4步: 程式碼裡面使用

談談模板方法設計模式的使用

通用模板

談談模板方法設計模式的使用

作者寫文章不容易,覺得寫的不錯的,就讚賞一下吧。感謝大家的支援。

談談模板方法設計模式的使用

有一起交流學習Android進階的,轉發+評論“資料”小編免費分享架構師資料庫

關注我下篇繼續分享螢幕適配的終極解決方案