在模板模式(template pattern)中,乙個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。
意圖:定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
主要解決:一些方法通用,卻在每乙個子類都重新寫了這一方法。
何時使用:有一些通用的方法。
如何解決:將這些通用演算法抽象出來。
關鍵**:在抽象類實現,其他步驟在子類實現。
應用例項:1、在造房子的時候,地基、走線、水管都一樣,只有在建築的後期才有加壁櫥加柵欄等差異。 2、西遊記裡面菩薩定好的 81 難,這就是乙個頂層的邏輯骨架。 3、spring 中對 hibernate 的支援,將一些已經定好的方法封裝起來,比如開啟事務、獲取 session、關閉 session 等,程式設計師不重複寫那些已經規範好的**,直接丟乙個實體就可以儲存。
優點:1、封裝不變部分,擴充套件可變部分。 2、提取公共**,便於維護。 3、行為由父類控制,子類實現。
缺點:每乙個不同的實現都需要乙個子類來實現,導致類的個數增加,使得系統更加龐大。
使用場景:1、有多個子類共有的方法,且邏輯相同。 2、重要的、複雜的方法,可以考慮作為模板方法。
以做飯為例子:比如做個西紅柿雞蛋把,可以分為三個步驟:
第一部:放油
第二部:放西紅柿
第三部:放雞蛋
不同的人做,步驟一樣,但是可能每一步的細節不一樣,以自己做和大廚做來比較吧。
}首先是我做飯
public class mycook extends cook
public void egg()
public void tomato()
}
然後是大廚做飯
public class chefcook extends cook
public void egg()
public void tomato()
}
public class test
}
自己:放很多油自己:放10個雞蛋
放很多西紅柿
大廚:放適量油
大廚:放適量雞蛋
大廚:放適量西紅柿
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...
設計模式之模板方法模式
定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...