template method(範本方法)顧名思義,
就是定義好method的內容,當作範本,讓其他程式使用。
也就是說,利用抽象類別宣告要供子類別實作的method,
然後在不能夠被繼承的(例如final)method中呼叫須被實作的method。
這個final method就是所謂的template method。
其精神即透過繼承(inheritance)的方式,讓子類別能夠實作不同的邏輯區塊,
然後在父類別的final method中,依相同順序執行不同區塊的邏輯。
如此一來,不同的子類別,能夠實作各自的方法細節,
然後統一利用父類別的final method,來執行任務。
讓我們用例子,來解釋template method pattern.
範例說明
因為EDI(電子資料交換)檔案,會由不同的協定傳送到自家系統中,
而且一定都會經過轉換分析的程序,來了解EDI檔案的內容。
所以,利用Template Method pattern設計了以下程式:
抽象類別定義了run這個template method,
因為這是每個EDI檔案必經的過程,所以不允許變動,
因此以final modifier修飾這個method。
接著,因為不同客戶的EDI檔案,可能有各自的傳輸協定和分析邏輯,
所以將receive和parse這二個method抽象化,
讓successor來實作內部細節,例如:
然後系統中就能根據不同的客戶需求,來處理各自的EDI檔案。
由以上例子可以了解,定義好template method後,
其餘的abstract method就交給子類別來實作,
如此一來,針對不同客戶的EDI需求,就能夠有不同的實作方式,
而且幾乎不用變更既有的程式碼。
完整範例程式
預告:Design Pattern - Strategy
沒有留言:
張貼留言