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 不分客戶端是一樣的,個別客戶端是不一樣的 ...