設計模式07 模板方法模式

2021-10-19 13:59:13 字數 1427 閱讀 2797

參考:

結構圖:

例子參考《大話設計模式》,面試出題目時,每個面試者面對的都是同樣的面試題,但他們的答案會有所不同,所以可以利用模板方法模式,將題目部分作為共同部分放在父類中,將面試者的答案作為不同部分,由各子類(面試者)去實現,

下面是**實現:

/*

* 設計模式:模板方法模式 - 面試回答問題

*/;void testquestion2()

;virtual void answer1(){};

virtual void answer2(){};

};class test*****a : public test*****

; virtual void answer2() override

;};int main(int argc, char *ar**)

優點:

模板方法模式是通過把不變的行為挪到乙個統一的父類,從而達到去除子類中重複**的目的、

子類實現模板父類的某些細節,有助於模板父類的擴充套件

通過乙個父類呼叫子類實現的操作,通過子類擴充套件增加新的行為,符合「開放-封閉原則」

缺點:按照設計習慣,抽象類負責宣告最抽象、最一般的事物屬性和方法,實現類負責完成具體的事務屬性和方法,但是模板方式正好相反,子類執行的結果影響了父類的結果,會增加**閱讀的難度

多個子類有共有的方法,並且邏輯基本相同

重要、複雜的演算法,可以把核心演算法設計為模板方法,周邊的相關細節功能則由各個子類實現

重構時,模板方法是乙個經常使用的方法,把相同的**抽取到父類中,然後通過建構函式約束其行為

注意區分c++中的模板和這裡的模板方法模式,模板分為函式模板和類模板,分別是根據不同型別在做同樣的操作時,符合這樣的條件時,我們就對函式和類進行了抽象,於是就有了模板;而模板方法模式是因為不同的類的在執行一些過程操作時,有部分步驟時相同的,我們為了簡練和減少重複的步驟,將這些同樣的步驟都放到了父類中,不同的步驟在父類中提供虛函式,並有各子類一一實現。

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...

設計模式 模板方法設計模式

物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...

設計模式 模板方法模式

模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...