標籤:
1. 設計模式分類。
設計模式在粒度和抽象層次上各不同,以有效方式組織起來便於對各族相關的模式進行引用,同時也便於發現新的設計模式。
分類原則:
(1) 目的準則: 根據模式是用來完成什麼工作的來劃分。
建立型: 與對象的建立相關。
結構型: 處理類和對象的組合。
行為型: 對類或對象怎樣互動和怎樣分配職責進行描述。
(2) 範圍準則: 指定模式主要是用於類還是用於對象。
類模式: 處理類和子類之間的關係,這些關係通過繼承建立, 是靜態,在編譯時間刻便確定下來了。
對象模式: 處理對象間的關係,這些關係在運行時刻是可以變化的,具有動態性。
從某種意義上來說, 幾乎所有模式都是使用繼承機制, 所以“類模式” 只指那些集中於處理類間關係的模式,而大部分模式都屬於對象模式的範疇。
2. 設計模式的組織方式:
建立型類模式將對象的部分建立工作延遲到子類, 建立型對象模式將它延遲到另一個對象中。
結構型類模式使用繼承機制來組合類別,結構型對象模式描述了對象的組裝方式。
行為型類模式使用繼承描述演算法和控制流程,行為性對象模式描述一組對象怎樣協作完成單個對象無法完成的任務。
有其他組織模式的方式, 有些模式會綁定在一起使用, 如: Composite 常和Iterator,Visitor一起使用; 有些模式是可替代的, 如:Prototype常用來替代Abstract Factory;有些模式儘管使用意圖不同,但設計結果很相似,如:Composite 和 Decorator 結構圖是相似的。
從多角度去思考設計模式,有助於對其功能,差異和應用場合有更深入的理解。
3. 設計模式怎樣解決設計問題:
(1) 尋找合適的對象
客戶請求是使對象執行操作的唯一方法,操作是對象改變內部資料的唯一方法。
物件導向最困難的部分是將系統分解成對象的集合,因為要考慮許多因素: 封裝,粒度,依賴關係,靈活性, 效能, 演化, 複用等,而且它們經常是互相衝突的。
物件導向的設計學支援許多設計方法, 如:(1) 寫出問題描述,挑出名詞和動詞,進而建立相應的類和操作;(2) 關注系統的協作和職責關係; (3) 對現實世界建模,再將分析時發現的對象轉化到設計中。
設計的許多個物件來源於現實世界的分析模型,但是,設計結果所得到的類通常在現實世界中並不存在,如數組類這樣的低層類。Composite模式引入了統一對待現實世界中並不存在的對象的抽象方法,嚴格反映當前現實世界的模型並不存能產生也能反映將來世界的系統。
設計模式幫你確定並不明顯的抽象和描述這些抽象的對象。例如:
描述過程或演算法的對象,在現實世界中不存在,但是它卻是設計的關鍵區段。
Strategy模式描述了怎樣實現可互換的演算法族, Strategy模式將實體的每個狀態原因為一個對象,這些對象在分析階段,甚至設計階段的早期都並不存在,後來為了使設計更加靈活,複用性更好才將其發掘
(2) 決定對象的粒度
對象在大小和數目上差異大。
設計模式描述了一個對象應該是什麼,粒度有多大。
Facade模式描述了怎樣用對象表示完整的子系統;Flyweight 模式描述了如何支援大量的最小粒度的對象 ,其他一些設計模式描述將一個對象分解成許多小對象的特定方法。
Abstract Factory和Builder 模式產生那些專門負責產生其他對象的對象; Visitor 和Command 產生的對象專門負責實現對其他對象或對象組的請求。
(3) 指定對象介面
對象的介面描述了該對象所能接受的全部請求的集合。當給對象發生請求時,所引起的具體操作既與請求本身相關,又與接受對象相關, 支援相同請求的不同對象可能對請求激發的操作有不同的實現。
(4) 描述對象的實現
(5) 運用複用機制
(6) 關聯運行時刻和編譯時間刻的結構
(7) 設計應支援變化
設計模式總體簡介