開始學習 設計模式, 從網上下了個《設計模式可複用物件導向軟體的基礎》,看了引言,發現自己以前寫過那麼多自以為不錯的代碼,但用設計模式的思想來看,全都是垃圾!!
看來要好好充電了。千裡之行,始於足下,先把設計模式的圖例總結一下:
圖例:
1).執行個體化
中的虛箭頭線表示一個類執行個體化另一個類的對象,箭頭指向被執行個體化的對象的類。
2).繼承
我們以豎線和三角表示子類別關係,
如所示。
3). 抽象類別
抽象類別的類名以斜體表示,以與具體類相區別。抽象操作也用斜體表示。圖中可以包括實現操作的虛擬碼,如果這樣,則代碼將出現在帶有折角的框中,並用虛線將該折角框與代碼所實現的操作相連,圖示如下。
4). 混入類(mixin class)
混入類(mixin class)是給其它類提供可選擇的介面或功能的類。它與抽象類別一樣不能執行個體化。混入類要求多繼承,圖示如下。
5). 委託
委託(delegation)是一種組合方法,它使組合具有與繼承同樣的複用能力[ Lie86, JZ91]。在委託方式下,有兩個對象參與處理一個請求,接受請求的對象將操作委託給它的代理者(delegate)。這類似於子類將請求交給它的父類處理。使用繼承時,被繼承的操作總能引用接受請求的對象,C++中通過this成員變數,Smalltalk中則通過self。委託方式為了得到同樣的效果,接受請求的對象將自己傳給被委託者(代理人),使被委託的操作可以引用接受請求的對象。
箭頭線表示一個類對另一個類執行個體的參考關聯性。引用名是可選的,本例為“rectangle”。
6). 彙總(aggregation)和相識(acquaintance)
彙總意味著一個物件擁有另一個物件或對另一個物件負責。一般我們稱一個對象包含另一個對象或者是另一個對象的一部分。彙總意味著彙總對象和其所有者具有相同的生命週期。
相識意味著一個對象僅僅知道另一個對象。有時相識也被稱為“關聯”或“引用”關係。相識的對象可能請求彼此的操作,但是它們不為對方負責。相識是一種比彙總要弱的關係,它只標識了對象間較鬆散的耦合關係。
在中,普通的箭頭線表示相識,尾部帶有菱形的箭頭線表示彙總:
C++中,彙總可以通過定義表示真正執行個體的成員變數來實現,但更通常的是將這些成員變數定義為執行個體指標或引用;相識也是以指標或引用來實現。從根本上講,是彙總還是相識是由你的意圖而不是由顯式的語言機制決定的。