[DP]Desigin Pattern Overview

設計模式是什麼?

設計模式能幹什麼?

什麼情況下使用設計模式?

我將按照以上順序來簡要的說明設計模式。


設計模式是什麼?

通俗的說設計模式:對被用來在特定場景下解決一般設計問題的類和相互通信對象的描述。

GoF中經典的描述爲:每一個模式描述了一個在我們周圍不斷重複發生的問題, 以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重複勞動。

可能以上的描述可能聽起來有點像是算法,事實上設計模式是代碼層面上對解決問題代碼的結構組織的描述。這裏更加強調的是類之間,對象之間,類和對象之間的關係模式。


設計模式的四要素:

名字:用一兩個詞來描述模式的問題和解決方案。

比如說,我們要談論工廠模式,但是我們並不知道工廠模式這個概念,那麼我們交談的時候是不是就說,哦,就是那個你不要自己在代碼中new 出一個對象,這樣會使的代碼耦合緊密。就是用那個 我們封裝了一個方法,這個方法就是專門來根據傳入的參數獲得一些對象的那個。

如果真的如上述所說,這相當糟糕,我要不斷跟上你的思路,然後用一大段話去描述出到底怎麼做,起了什麼效果。

所以這裏就有了名稱要素的好處,使的我們在較高的抽象層次上進行設計,便於我們同他人交流設計思想和設計結果。hey,你這裏應該用工廠模式,而不是自己new一個出來。 多麼簡單。

問題:描述應在何時使用模式。

解決方案:描述了設計的組成部份,部分之間的關係和各自的職責,以及協作方式。

效果:使用了該種設計模式所能帶來預期的效果。


設計模式能幹什麼?

好了,現在我們來討論討論設計模式能幹什麼。

首先第一個好處,設計模式就如我上面所提到的,方便與他人交流設計思想和設計結果,在較高層次上設計。

其次,設計模式爲我們描述了我們編碼設計過程中不斷髮生的事,以及解決問題方案。

根據GoF 中描述  設計模式總結大概可以分爲23種:

Abstract Factory:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它 們具體的類。

Adapter:將一個類的接口轉換成客戶希望的另外一個接口。 Adapter模式使得原本 由於接口不兼容而不能一起工作的那些類可以一起工作。

Bridge:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

Builder:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不 同的表示。 

Chain of Responsibility:爲解除請求的發送者和接收者之間耦合,而使多個對象都 有機會處理這個請求。將這些對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象 處理它。

Command:將一個請求封裝爲一個對象,從而使你可用不同的請求對客戶進行參數 化;對請求排隊或記錄請求日誌,以及支持可取消的操作。

Composite:將對象組合成樹形結構以表示“部分 -整體”的層次結構。Composite使 得客戶對單個對象和複合對象的使用具有一致性。

Decorator:動態地給一個對象添加一些額外的職責。就擴展功能而言,Decorator模 式比生成子類方式更爲靈活。

Facade:爲子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層 接口,這個接口使得這一子系統更加容易使用。 

Factory Method:定義一個用於創建對象的接口,讓子類決定將哪一個類實例化。 Factory Method使一個類的實例化延遲到其子類。 

Flyweight:運用共享技術有效地支持大量細粒度的對象。

Interpreter:給定一個語言, 定義它的文法的一種表示,並定義一個解釋器 , 該解釋 器使用該表示來解釋語言中的句子。 

Iterator:提供一種方法順序訪問一個聚合對象中各個元素 , 而又不需暴露該對象的 內部表示。 

Mediator:用一箇中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式 地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。

Memento:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外 保存這個狀態。這樣以後就可將該對象恢復到保存的狀態。 

Observer:定義對象間的一種一對多的依賴關係 ,以便當一個對象的狀態發生改變時 , 所有依賴於它的對象都得到通知並自動刷新。

Prototype:用原型實例指定創建對象的種類,並且通過拷貝這個原型來創建新的對 象。

Proxy:爲其他對象提供一個代理以控制對這個對象的訪問。

Singleton:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。

State:允許一個對象在其內部狀態改變時改變它的行爲。對象看起來似乎修改了它 所屬的類。 

Strategy :定義一系列的算法,把它們一個個封裝起來, 並且使它們可相互替換。本模 式使得算法的變化可獨立於使用它的客戶。 

Template Method:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。 Template Method使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

Visitor:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

好了,就是以上那麼多,事實上這裏只是個預覽,我將在接下來的一週內對23種設計模式進行詳細的分析和解釋,並盡力結合spring源碼分析這些模式應用環境。


如果要按照設計模式功效大概分個類,那麼大概像這樣:





什麼情況下使用設計模式?

我手滑,寫多了的。不過我會在接下來的23篇種進行深入分析應用場景,並結合spring源碼。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章