設計模式學習告一段落,一時間有點兒心亂如麻啊真是——剪不斷,理還亂!思考了一陣子,也不知道究竟該如何去總結它,
但人還是要活着的,路還是要走的,硬着頭皮往前闖!
仔細想想,在學習23個設計模式中,我們始終都在圍繞着一個主線在思考代碼的布局,那就是六大原則——開放封閉,單一職責,依賴倒轉,裡氏代換,迪米特法則和合成聚合複用原則。當然,并不是說我們必須遵循每一個原則,設計模式中講究的是一個更優原則,每種原則都有自己的優點,但适用于不同的場合又會有自己的弱勢,此時應遵循更優化。代碼的設計隻有更好沒有最好!
那麼其次,在各個原則的基礎上,在面向對象設計的各個類之間是如何聯系起來形成一個完成的程式代碼,在這裡靠的是類與類之間的就各種關系,主要包括——關聯(聚合,組合),依賴,繼承和實作。那麼将這幾種關系進一步抽象出來,其實就是面向對象程式設計語言的特點。
在我看來,設計模式最核心的東西就是原則和類之間的關系。那麼代碼之間到底是怎樣設計,才能夠使得代碼的可維護性,可複用性增強,使得代碼更加靈活呢?這就是不同設計模式所發揮的作用!
接下來,再來看一下23種設計模式之間的關系。教材上把它們分成了3個大類。
一、建立型
共同點:都在為類的執行個體化即建立對象服務。
各個模式的特點簡要的概括如下:
二、結構型
共同目标:類與對象之間如何組合形成更大的結構。個人認為這裡更強調的是各個類之間的一種關系。
在結構型模式中,我認為有一種最為經典的關系模式,這種關系,認真觀察,它存在于每一種結構型
模式中。
如圖所示:自己給起個名字吧,就叫綜合模式,嘿嘿!
結構型各個模式特點簡要概括如下:
在結構型模式中,我們需要注意外觀、代理和擴充卡三種模式之間的關系:
1.代理——外觀
二者之間似乎很相似,都存在一個中介來避免了直接與細節的接觸。
但是它們之間有不同之處;
代理對象代表一個單一對象且它無法直接通路目标對象。
而外觀對象代表一個子系統且可以直接通路子系統中的各個對象。
2.代理——擴充卡
這二者之間也都存在一個中間類,但是這個中間類的職責卻不同。
代理是一種原來對象的代表,其他需要與這個對象打交道的操作都是和這個代表交涉。
而擴充卡則不需要虛構出一個代表者,隻需要為應付特定使用目的,将原來的類進行組合。
對以上以上關系的了解,結合大話設計模式中的小例子很容易了解。
三、行為型
分類依據:涉及到算法和對象間的職責配置設定,類與對象之間的結構關系,但更加注重描述類與對象之間的通訊聯系。
各種模式的簡要概括如下:
其實,我們可以看出來,每個設計模式其實都是根據六大原則進行設計,已達到最優!
以上是對設計模式中各個模式的簡要概括,根據自己的了解,很多可能了解的有偏差,望指正!