設計模式介紹-書

一、設計模式的要素

設計模式一般有以下四個要素。

1.模式名稱(Pattern Name)

一個助記名,它用一兩個詞來描述模式的問題、解決方案和效果。命名一個新的模式就增加了設計詞彙。設計模式允許在較高的抽象層次上進行設計。基於一個模式詞彙表,就可以討論模式並在編寫文檔時使用它們。模式名可以幫助人們思考,便於人們與其他人交流設計思想及設計結果。

2.問題(Problem)

描述了應該在何時使用模式。它解釋了設計問題和問題存在的前因後果,可能描述了特定的設計問題,如怎樣用對象表示算法等;也可能描述了導致不靈活設計的類或對象結構。

3.解決方案(Solution)

描述了設計的組成成分、它們之間的相互關係及各自的職責和協作方式。因爲模式就像一個模板,可應用於多種不同場合,所以解決方案並不描述一個特定而具體的設計或實現,而是提供設計問題的抽象描述和怎樣用一個具有一般意義的元素組合(類或對象組合)來解決這個問題。

4.效果(Consequences)

描述了模式應用的效果及使用模式應權衡的問題。儘管描述設計決策時,並不總提到模式效果,但它們對於評價設計選擇和理解使用模式的代價及好處具有重要意義。

二、創建型設計模式

創建型模式抽象了實例化過程。它們幫助一個系統獨立於如何創建、組合和表示它的那些對象。一個創建型模式使用繼承改變被實例化的類,而一個對象創建型模式將實例化委託給另一個對象。
創建型模式中有兩個不斷出現的主旋律。第一,它們都將關於該系統使用哪些具體的類的信息封裝起來。第二,它們隱藏了這些類的實例是如何被創建和放在一起的。整個系統關於這些對象所知道的是由抽象類所定義的接口。因此,創建型模式在爲什麼被創建,誰創建它,它是怎樣被創建的,以及何時創建這些方面給予了很大的靈活性。它們允許使用結構和功能差別很大的“產品”對象配置一個系統。配置可以是靜態的(即在編譯時指定),也可以是動態的(在運行時指定)。

三、結構性設計模式

結構性模式涉及如何組合類和對象以獲得更大的結構。結構性模式採用繼承機制來組合接口或實現。結構性對象模式不是對接口和實現進行組合,而是描述瞭如何對一些對象進行組合,從而實現新功能的一些方法。
Composite(組合)模式是結構性對象模式的一個實例。它描述瞭如何構造一個類層次式結構,這一結構由兩種類型的對象所對應的類構成。
Flyweight(享元)模式爲共享對象定義了一個結構。至少有兩個原因要求對象共享:效率和一致性。Flyweight 模式的對象共享機制主要強調對象的空間效率。使用很多對象的應用必須考慮每一個對象的開銷。
Facade(外觀)模式描述瞭如何使用單個對象表示整個子系統。模式中的 Facade 用來表示一組對象,Facade 的職責是將消息轉發給它所表示的對象。
Bridge(橋接)模式將對象的抽象和其實現分離,從而可以獨立地改變它們。
Decorator(裝飾器)模式描述瞭如何動態地爲對象添加職責。這一模式採用遞歸方式組合對象,允許添加任意多的對象職責。

四、行爲設計模式

行爲模式及算法和對象職責的分配。行爲模式不僅描述對象或類的模式,還描述它們之間的通信模式。這些模式刻畫了在運行時難以跟蹤的複雜的控制流。它們將用戶的注意力從控制流轉移到對象間的聯繫方式上來。
行爲類模式使用繼承機制在類間分派行爲,主要有 Template Method (模板方法)和 Interpreter(解釋器)兩種模式。
行爲對象模式使用對象複覈而不是繼承。一些行爲對象模式描述了一組對等的對象怎樣相互協作以完成其中任一個對象都無法單獨完成的任務。
Observer(觀察者)模式定義並保持對象間的依賴關係。典型的 Observer 的例子就是 Smalltalk 中的模型/視圖/控制器,其中一旦模型的狀態發現變化,模型的所有視圖都會得到通知。
其他的行爲對象模式常將行爲封裝在一個對象中並將請求指派給它。

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