設計模式---可復用面向對象軟件的基礎
1 設計模式四要素
模式名稱、問題、解決方案、效果
2 設計模式描述
模式名和分類、意圖、別名、動機、適用性、結構、參與者、協作、效果、實現、代碼示例、已知應用(至少兩個)、相關模式
3 設計模式編目
即設計模式分類
4 設計模式作用
1)尋找合適的對象
2)決定對象的粒度
3)制定對象接口
4)描述對象的實現
5)運用復用機制
6)關聯運行時刻和編譯時刻的結構
7)設計應支持變化
5 重要概念
1 )類繼承與接口繼承
類繼承根據一個對象的實現定義了另一個對象的實現。它是代碼和表示的共享機制。
接口繼承(子類型)描述了一個對象什么時候能被用來替代另一個對象。
2)針對接口編程,而不是針對實現編程。
3)3種復用技術
繼承、組合(委托是組合的一種)與參數化類型
組合技術是通過獲得對其他對象的引用而在運行時刻動態定義的。允許你在運行時刻改變被組合的行為,但是它存在間接性,比較低效。
繼承在編譯時刻靜態定義的,可直接使用。允許你提供操作的缺省實現,并通過子類重定義這些操作。破壞了封裝性。
參數化類型允許你改變類所用到的類型。如generic(Ada,java預留)和templates(C++)
繼承和參數化類型都不能在運行時刻改變。
注意:優先使用對象組合,而不是類繼承。
委托(delegation)使組合具有與繼承同樣的復用能力。
4)2種復用層次
代碼復用(如工具箱、類庫)、設計復用(如框架)
5)模式設計應該封裝變化 P20
6)聚合(aggregation) 與相識(acquaintance,也稱為:關聯、引用)
聚合意味著一個對象擁有另一個對象或對另一個對象負責。一般我們稱一個對象包含另一個對象或者是另一個對象的一部分。聚合意味著聚合對象和其他所有者具有相同的生命周期。
相識意味著一個對象僅僅知道另一個對象。相識的對象可能請求彼此的操作,但是他們不為對方負責。相識是一種比聚合要弱的關系,它只標示對象間松耦合關系。
聚合還是相識是由你的意圖而不是由顯式的語言機制決定的。它們的區別在編譯時刻(源代碼)很難看出來。