設計模式筆記—Template Method Pattern
Template Method Pattern 用於建立通用流程,並透過繼承的方式讓子類別實現流程的細節
以我個人的理解,就是建立一套抽象的 SOP 流程,細節則依照業務的不同而有所差異
Template Method Pattern 是一個簡單好用的模式,雖然靈活性不高,但是容易實作
可以用在各種場合,只要覺得大體流程相似就可以套用
這邊會以一個簡單的遊戲類別當例子:
public abstract class Game { |
在上面的程式中,可以看到一個抽象的 Game
類別
在 Run()
方法就是 Template Method
裡面是簡單的遊戲運作流程,先初始化,然後進到迴圈內不斷得更新與繪製畫面
其中的 Initialize()
、 Update()
、 Render()
都交由子類別自己實現,比如:
class MyGame : Game { |
思考模式的概念
Template Method Pattern 模式偏重在抽象流程
也因此這個模式需要透過繼承來使用
有些業務可以被一起歸納成抽象的業務概念,這種業務概念會有一套既定的流程
流程少部份的細節會不太一樣,但大體上都是照著既定的流程跑,也因此使用到繼承這種關係比較強烈的詞彙
將相似的概念抽出來獨立成業務概念的類別是有好處的
這樣可以更專注在實際的業務細節上
例如說,前面講解的 Game
類別就是將遊戲的整體架構抽成一個概念
之後實作時只要關注 Initlaizle()
、 Update()
、 Render()
分別需要做什麼就好
與 Strategy Pattern 的比較
在 無暇的程式碼—敏捷完整篇 書中,Template Method Pattern 與 Strategy Pattern 是被編在一起介紹的
兩個模式的概念類似,前者是透過繼承,後者則是透過依賴注入
不過我認為兩者在根本上的概念並不相同
Template Method Pattern 重在共通的抽象概念,關聯性強,靈活度低
Strategy Pattern 則重在各種可使用的方法上,關聯性低,靈活度高
有關 Strategy Pattern 的介紹之後會再補連結
或者等文章出來時也可以直接透過 設計模式筆記 查看
後記
當初本來是要在放假的時候寫的,結果想不到要怎麼寫例子,就一直拖到退伍了
在 無暇的程式碼—敏捷完整篇書中的例子是 Application 跟 Sorter ,但是我覺得不好說明模式的概念,所以就選擇自己生例子
可惜的是,目前我還沒有碰到比較好的案例來說明,最後就選擇在維基上看到的遊戲類別了
若依照書中所描述,作者在一般情況下會偏好使用 Template Method Pattern 實作 Sorter ,這樣比較簡單
但是我會偏好 Strategy Pattern,因為比較的部份個人認為它屬於策略,自然就需要使用比較靈活的 Strategy Pattern
這其實也間接表示,用什麼模式其實要看使用場合以及團隊對業務的看法