學習設計模式不光要學習設計模式的思想,還要去深入理解,為什麼要用這個設計模式。本文先介紹了模板方法模式的概念及簡單實現。如何深入理解?讀優秀的框架**,看別人**,了解它們的使用場景。 - - - 博主老師(感謝他)
定義:定義乙個操作中的演算法的框架,將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
考慮這麼個例子:
電腦開機這個動作:需要執行以下步驟:硬體檢查、載入作業系統、登入。
博主的電腦開機:在登入步驟是用密碼登入。
博主老師的電腦開機:在硬體檢查步驟 需要額外檢查硬體防火牆;在登入步驟 需要用指紋認證。
public
abstract
class
abstractcomputer
protected
void
loados()
protected
void
login()
public
final
void
startup()
}
public
class
cordercomputer
extends
abstractcomputer
}
public
class
mastercomputer
extends
abstractcomputer
@override
protected
void
login()
}
測試類
public
static
void
main
(string[
] args)
輸出
我的電腦執行開機:
開機-start
硬體檢查
載入作業系統
程式設計師的計算器需要驗證使用者名稱密碼
開機結束
師傅的電腦執行開機:
開機-start
硬體檢查
檢查硬體防火牆
載入作業系統
進行指紋識別等複雜的驗證
開機結束
模板方法模式在平時工作**中應該還是用過的,只不過當時不知道這也是個設計模式。
它和策略模式的區別:
乙個「策略」是乙個 整體的(完整的) 演算法,演算法是可以被整體替換的。而模板方法只能被替換其中的特定點,演算法流程是固定不可變的。
由於這個模式比較簡單,也不需要再去找實現了。jdk原始碼中其實有好多,abstractlist是arraylist的模板。abstractmap是hashmap的模板等等。
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
設計模式 模板方法模式C 實現
定義乙個操作的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。實現方案 將演算法 邏輯框架放在抽象基類中,並定義好實現介面,在子類中實現細節介面。注 策略模式,解決的是相同的問題,只是其方案是將各個介面封裝為類,通過委託 組合方式解決問題 ...
設計模式 模板方法設計模式
物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...