模板方法模式

2021-09-07 21:28:47 字數 1247 閱讀 7203

理解了模板方法的定義之後,自然實現模板方法也不是什麼難事了,下面以生活中炒蔬菜為例來實現下模板方法模式。在現實生活中,做蔬菜的步驟都大致相同,如果我們針對每種蔬菜類定義乙個燒的方法,這樣在每個類中都有很多相同的**,為了解決這個問題,我們一般的思路肯定是把相同的部分抽象出來到抽象類中去定義,具體子類來實現具體的不同部分,這個思路也正式模板方法的實現精髓所在,具體實現**如下:

//

客戶端呼叫

class

client

}public

abstract

class

vegetabel

//第一步倒油

public

void

pouroil()

//把油燒熱

public

void

heatoil()

//油熱了之後倒蔬菜下去,具體哪種蔬菜由子類決定

public

abstract

void

pourvegetable();

//開發翻炒蔬菜

public

void

stir_fry()

}//菠菜

public

class

spinach : vegetabel

}//大白菜

public

class

chinesecabbage : vegetabel

}

在上面的實現中,具體子類中重寫了匯入蔬菜種類的方法,因為這個真是燒菜方法中不同的地方,所以由具體子類去實現它。

實現完模板方法模式之後,讓我們看看模板方法的類圖結構,以理清該模式中類之間的關係,具體類圖如下:

模板方法模式中涉及了兩個角色:

下面讓我們繼續分析下模板方法的優缺點。

優點:

實現了**復用

能夠靈活應對子步驟的變化,符合開放-封閉原則

缺點附:在.net中模板方法的應用也很多,例如我們在開發自定義的web控制項或winform控制項時,我們只需要重寫某個控制項的部分方法。

到這裡,模板方法的介紹就結束了,模板方法模式在抽象類中定義了演算法的實現步驟,將這些步驟的實現延遲到具體子類中去實現,從而使所有子類復用了父類的**,所以模板方法模式是基於繼承的一種實現**復用的技術。

模板方法模式

有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...

模板方法模式

模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...

模板方法模式

模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...