模板方法模式一般用於流程處理,它能夠定義一套流程的框架,然後由子類來實現每乙個步驟具體的操作。
通俗一點,就是父類定義一系列介面,並固定這些介面的呼叫次序;子類只能夠細化每一步,無法改變(也不需要改變)這些步驟的執行次序。
模板方法的使用場景非常多,它也是各種框架最常用的設計模式。
下面我們通過乙個例子來感受一下: 我們要實現兩個流程上大致一樣的操作:燒一條紅燒魚、做一斤小龍蝦。我們先抽象一下這兩道菜的公共流程:
1. 殺死它們
2. 把它們弄乾淨
3. 放入鍋中,加佐料
4. 煮熟
好吧,畢竟是程式設計師,不要太注重做菜的細節。。。
public
class templatedriver
// 放入鍋中,同時加佐料。
public
abstract
void
inpot();
// **煮
public
void
fire()
// 這是模板方法的靈魂,通過cooking方法,就能執行我們規定的流程,這也是「模板方法」名稱的**。
// 為了防止這個流程被子類篡改,使用final關鍵字修飾,確保所有子類都是照著這個流程走的。
public final void
cooking()
}// 下面我們實現fish這個類,我們主要完善kill與inpot這兩個方法,而不需要去考慮流程上的差異
static class fish extends template
@override
public
void
inpot()
}// 實現lobster(小龍蝦)類
static class lobster extends template
@override
public
void
inpot()
}public
static
void
main(string args)
}
結果
---------------燒條魚-----------------
用刀拍死
刮去鱗片
開腸破肚
挖出內臟
洗乾淨把魚放入鍋中
加水放入蔥薑蒜
加黃酒開始煮...
-------------搞一斤小龍蝦-----------------
把頭減掉
抽取蝦線
洗乾淨把龍蝦放入鍋中
加水加各種料(由於料太多,我也不知道有哪些)
開始煮...
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...
模板方法模式
模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...
模板方法模式
模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...