//說些廢話
1.其實沒啥好說,因為模板方法模式用得實在太多了,只要是重寫過子類方法的,80%以上應該也用過這個模式了
//部分資料**
1.c++設計模式:
2.程杰——大話設計模式
//適用場合
當不變和可變的方法在子類實現中混合在一起時,通過模板方法模式把這些行為搬移到單一的地方,幫助子類擺脫重複的不變行為的糾纏。
//正文
舉個最簡單的例子了:
class parent
這個就是模板方法模式了,因為只有shape不同,所以draw的部分全部上公升到父類實現,drawshape也就是模板方法,給出邏輯骨架,邏輯的組成是抽象操作(shpae),推遲到子類實現。
模板方法模式,定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。[dp]
所以模板方法就是把不變的東西提公升到父類,避免子類重複**,實現**復用。
這就是模板方法模式的優勢了。
//問題 1.
q:什麼時候用模板方法模式?
a:不變和可變你的行為混合在子類中,就用唄。
2.q:有什麼該注意的嗎?
a:記得讓子類重寫的方法放在protected,提供給外部呼叫的寫public,也就是不變的public,變的protected。
3.q:跟其他模式的區別?
a:說說跟 裝飾模式 和 原型模式 吧。
裝飾模式是為了擺脫類**,為物件增加功能用的。
原型模式是為了子類複製,其實可以看成是複製建構函式的呼叫,那個是公有set可變的行為,物件例項化後用。這個是類定義的時候protected提供給子類可變行為。(乙個對類而言,乙個對物件而言)
其實這個示例,加個clone,加個複製建構函式(直接預設也行,反正是淺拷貝),把shape()變成公有setshape(),就變成原型模式了。
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
有毒的設計模式 簡單工廠模式
description 說些廢話 唔,本來想偷懶不寫設計模式的東西,但是自從上週被阿里巴巴 面問出屎之後我還是決定好好複習一下設計模式吧。還有就是應該用markdown編輯器的,但是那排版我老感覺很抓急,排得不漂亮,還是用普通的吧 orz 正文 1.在程式中,需要建立的物件很多,導致物件的new操作...
設計模式 模板方法設計模式
物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...