模板方法模式

2021-08-20 19:43:19 字數 1366 閱讀 4427

模板方法模式一般用於流程處理,它能夠定義一套流程的框架,然後由子類來實現每乙個步驟具體的操作。

通俗一點,就是父類定義一系列介面,並固定這些介面的呼叫次序;子類只能夠細化每一步,無法改變(也不需要改變)這些步驟的執行次序。

模板方法的使用場景非常多,它也是各種框架最常用的設計模式。

下面我們通過乙個例子來感受一下: 我們要實現兩個流程上大致一樣的操作:燒一條紅燒魚、做一斤小龍蝦。我們先抽象一下這兩道菜的公共流程:

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 ...