天天看點

設計模式第8式:模闆方法模式

前言

模闆方法相對比較簡單,适用的場景也比較固定。如果一類算法(方法)中有一些步驟是固定的,另一部分步驟是變化的,那麼我們可以将算法的步驟抽象成模闆放在父類中,固定的步驟實作在父類中,變化的步驟設定為抽象方法由子類實作。我們在使用的時候使用子類即可。

模闆方法模式雖然簡單,但是在Java和Spring源碼中大量使用,尤其是在Spring這種類繼承關系很深的架構中,使用模闆方法将功能方法放在父類,變化的方法放在子類,可以有效減少重複代碼。

正文

1、模闆方法定義

模闆方法模式在父類方法中定義一個算法的骨架,而将一些步驟延遲到子類中。模闆方法使得子類在不改變算法結構的情況下,重新定義算法的某些步驟
           
設計模式第8式:模闆方法模式

2、好萊塢原則

别調用(打電話給)我們,我們會調用(打電話給)你
           

好萊塢原則允許低層元件将自己挂載到系統上,但是高層元件會決定什麼時候和怎麼樣使用這些低層元件。換句話說,高層元件對待低層元件的方式就是“别調用我們,我們會調用你”。

設計模式第8式:模闆方法模式

3、模闆方法vs政策

兩個都是封裝算法,但是目的不同。模闆方法的重點是定義算法大綱,子類實作某些步驟;政策模式的重點是封裝算法族,并讓這些算法可以互換。

4、模闆方法模式在Spring中的應用

基本上每一個以Abstract開頭的類裡面都能找到模闆方法的影子。比如Spring工廠啟動方法refresh(),裡面的空方法就是留着給子類實作的,用于各種不同類型的工廠啟動時做一些操作。

總結

模闆方法模式出現的頻率很高,這個模式相對比較簡單,我們可以在實際程式設計中多應用此模式。