Template Method用來表達擁有共同的執行流程與步驟,但執行步驟的實作方式可能不同

 

Example

假設我們有一個程式是要去讀設定資料,而這個資料來源可以是從檔案或是資料庫

Client只要呼叫doParse就能取得PersonData的設定資料

因為不管資料來源是從檔案還是資料庫其實讀取資料的流程和步驟都一樣

只是讀取的實作方式不同,因此我們可以套用Template method patern

template method.png

 

以我們的ConfigParser中定義了doParse()這個template method,它主要就是拿來控制流程用的

它的步驟分別是:

1. readData: 讀取資料的方式就可以分成透過檔案或資料庫

2. parseToken: 擷取與分析我們需要的資訊

3. buildModel: 建立我們的domain model

4. validate: 接著是驗證資料

最後回傳PersonData

ConfigParser.png

 

接著DBConfigParser和FileConfigParser就可以去繼承ConfigParser

Override非控制流程的method,依照資料來源不同而去實作

(這邊沒有真的去讀取資料庫和檔案)

DBConfigParser.png

FileConfigParser.png

 

最後我們寫一個Client來驗證我們的程式

Client.png

最後我們的Output就長這樣

output.png

可以看得出來parse的流程都一樣,只是實作的細節和資料不一樣

 

Ref:

[1] http://teddy-chen-tw.blogspot.com/2017/08/ntemplate-method.html

arrow
arrow

    Mark Zhang 發表在 痞客邦 留言(0) 人氣()