模式定義:
在模板模式(Template Pattern)中伤极,一個抽象類公開定義了執(zhí)行它的方法的方式/模板碴里。它的子類可以按需要重寫方法實現哀托,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬于行為型模式痪欲。
定義一個操作中的算法的骨架悦穿,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟业踢。
一些方法通用栗柒,卻在每一個子類都重新寫了這一方法。
有一些通用的方法知举。
將這些通用算法抽象出來瞬沦。
在抽象類實現,其他步驟在子類實現雇锡。
實現
我們將創(chuàng)建一個定義操作的 Game 抽象類逛钻,其中,模板方法設置為 final锰提,這樣它就不會被重寫曙痘。Cricket 和 Football 是擴展了 Game 的實體類,它們重寫了抽象類的方法立肘。
TemplatePatternDemo边坤,我們的演示類使用 Game 來演示模板模式的用法。
源碼:代碼倉庫
總結:
1赛不、封裝不變部分惩嘉,擴展可變部分。
2踢故、提取公共代碼文黎,便于維護。
3殿较、行為由父類控制耸峭,子類實現。
每一個不同的實現都需要一個子類來實現淋纲,導致類的個數增加劳闹,使得系統(tǒng)更加龐大。
1洽瞬、有多個子類共有的方法本涕,且邏輯相同。
2伙窃、重要的菩颖、復雜的方法,可以考慮作為模板方法为障。
為防止惡意操作晦闰,一般模板方法都加上 final 關鍵詞放祟。
參考:菜鳥教程