元件協作模式 模板方法設計模式

2021-10-10 09:20:06 字數 1811 閱讀 2786

gof-23 模式分類

從目的上來看:

建立型模式,將物件部分建立工作延遲到子類或者其他物件,從而應對需求變化為物件建立時具體型別帶來的衝擊

結構型模式:通過類繼承或者物件組合獲得更靈活的結構,從而應對需求變化為物件的結構帶來的衝擊

行為型模式:通過類繼承或者物件組合來劃分類與物件間的職責,從而應對需求變化為多個互動的物件帶來的衝擊

從範圍上來看:

4. 類模式處理類與子類的靜態關係

5. 物件模式處理物件間的動態關係

重構獲得模式

物件導向設計模式是「好的物件導向設計」,所謂「好的物件導向設計」指是那些可以滿足 「應對變化,提高復用」的設計 。

現代軟體設計的特徵是「需求的頻繁變化」。設計模式的要點是「尋找變化點,然後在變化點處應用設計模式,從而來更好地應對需求的變化」.「什麼時候、什麼地點應用設計模式」比「理解設計模式結構本身」更為重要。設計模式的應用不宜先入為主,一上來就使用設計模式是對設計模式的最大誤用。沒有一步到位的設計模式。

重構關鍵技法

靜態 			->動態

早繫結 ->晚繫結

繼承 ->組合

編譯時依賴 ->執行時依賴

緊耦合 ->松耦合

template method 模式(模板方法)

我們在看了上面這麼多的方法的同時,我們其實並不知道應該去使用哪一種方法,所以動機很重要,就是在軟體設計的過程中,我們要知道哪些是相對不變的,哪些是相對改變的,下面我們說的這個經典的方法就是操作結構是不變的,方法是改變的

//程式庫開發人員

class library

for(

int i =

0; i <

4; i++

)step5()

;}virtual ~

library()

protected:

void

step1()

void

step3()

void

step5()

virtual bool step2()

=0;//變化

virtual void

step4()

=0;//變化};

//應用程式開發人員

protected:

virtual bool step2()

virtual void

step4()

};intmain()

}

我們上面確定1,3,5步驟和整體流程是不變的,我們需要改變的是2,4我們通過c++的特性,繼承和多型,丟擲介面來實現,這其實就是一種早繫結和晚繫結,將早繫結變為了晚繫結

書本中的定義:

定義乙個操作中的演算法的骨架 (穩定),而將一些步驟延遲(變化)到子類中。template method使得子類可以不改變(復用)乙個演算法的結構即可重定義(override 重寫)該演算法的某些特定步驟。

模板方法模式 元件協作

include include include using namespace std 模板方法模式 模板方法模式準備乙個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先制...

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

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

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

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