設計模式之模板方法模式

2022-07-17 07:09:09 字數 867 閱讀 4945

模板方法模式為我們定義了乙個演算法的框架,框架之中定義了方法的執行步驟,但是具體每一步的方法要由具體的子類來實現。這樣,在不改變整個演算法結構的同時,就可以定義某個演算法的特定步驟。

模板方法模式的類結構如下:

模板函式:在乙個抽象基類中定義了乙個模板方法,它規定了整個演算法的結構並且定義了方法的執行步驟,通過呼叫若干其他的方法來實現這些步驟。該方法要在類外部被呼叫執行,所以要宣告為public型別。同時,該方法拒絕重寫,所以要用final來宣告。

步驟函式:整個演算法分為若干個步驟執行,每個步驟由乙個步驟方法來實現。如果該步驟的業務比較明確,可以直接在基類中實現為具體方法,由於不希望它在類外被呼叫,故而要宣告為private方法;如果還不明確,則可以將該方法宣告為的抽象方法,由繼承它的子類來進行複寫。為了保證子類可以複寫到它,要宣告為protected(子類許可權)或者default(包內許可權)。

此時我們面對乙個問題,如果演算法執行這一系列步驟時,希望跳過某個步驟的時候,應該怎麼辦呢?這時需要在模板方法中提供乙個所謂"hook方法",即在每個步驟前加上if判斷;該方法提供乙個預設實現或者由具體子類去實現,用來控制是否跳過某個具體的步驟,所以要宣告為protected或者default。

使用場景

優點

封裝性好、復用性好、遮蔽細節、便於維護

缺點

由於單繼承的限制,子類一旦繼承了其他父類,就無法繼承模板基類了。

模板設計模式 PHP設計模式之模板方法模式

模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...

設計模式之模板方法設計模式

父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...

設計模式之模板方法模式

定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...