1.模板方法模式
1.1 場景
編寫製作豆漿的程序,說明如下:
- 製作豆漿的流程 選材—>添加配料—>浸泡—>放到豆漿機打碎
- 通過添加不同的配料,可以製作出不同口味的豆漿
- 選材、浸泡和放到豆漿機打碎這幾個步驟對於製作每種口味的豆漿都是一樣的(紅豆、花生豆漿。。。)
主要代碼
1.2 模板方法模式
基本介紹
- 模板方法模式(TemplateMethodPattern),又叫模板模式(TemplatePattern),z在一個抽象類公開定義了執行它的方法的模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。
- 簡單說,模板方法模式 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個算法的結構,就可以重定義該算法的某些特定步驟
- 這種類型的設計模式屬於行爲型模式。
對原理類圖的說明-即(模板方法模式的角色及職責)
- AbstractClass抽象類, 類中實現了模板方法(template),定義了算法的骨架,具體子類需要去實現 其它的抽象方法 operationr2,3,4
- ConcreteClass實現抽象方法 operationr2,3,4, 以完成算法中特點子類的步驟
1.3 模板方法模式的鉤子方法
- 在模板方法模式的父類中,我們可以定義一個方法,可以爲抽象方法,子類必須實現,也可以是空的非抽象方法,它
默認不做任何事
,子類可以視情況要不要覆蓋它,該方法稱爲 “ 鉤子 ” 。 - 還是用上面做豆漿的例子來講解,比如,我們還希望製作純豆漿,不添加任何的配料,請使用鉤子方法對前面的模板方法進行改造
1.4 spring體現
1.5 模板方法模式的注意事項和細節
- 基本思想是:算法只存在於一個地方,也就是在父類中,容易修改。需要修改算法時,只要修改父類的模板方法或者已經實現的某些步驟,子類就會繼承這些修改
- 實現了最大化代碼複用。父類的模板方法和已實現的某些步驟會被子類繼承而直接使用。
- 既統一了算法,也提供了很大的靈活性。父類的模板方法確保了算法的結構保持不變,同時由子類提供部分步驟的實現。
- 該模式的不足之處:每一個不同的實現都需要一個子類實現,導致類的個數增加,使得系統更加龐大
- 一般模板方法都加上 final 關鍵字, 防止子類重寫模板方法.
- 模板方法模式使用場景:當要完成在某個過程,該過程要執行一系列步驟 ,這一系列的步驟基本相同,但其個別步驟在實現時 可能不同,通常考慮用模板方法模式來處理