設計模式(1)
Gang of Four的“Design Patterns: Elements of Resualbel Software”書將設計模式歸納為三大類型,共23種。
創建型模式:通常和對象的創建有關,涉及到對象實例化的方式。(共5種模式)
行為型模式:通常和對象間通信有關。(共11種模式)
結構型模式:描述的是如何組合類和對象以獲得更大的結構。(共7種模式)
模式:描述了一個在我們周圍不斷重復發生的問題,以及該問題的解決方案的核心,從而避免重復勞動,即設計模式目標之一為可復用。
類模式 :描述的是如何使用繼承提供更有用的程序接口。
對象模式 :描述的是如何通過使用對象組合或將對象包含在其他對象裏,將對象組合成更大的一個結構。
- 松耦合設計思想
- 面向對象設計原則
- 重構技法改善設計
- 掌握GOF核心設計模式
底層思維:向下,如何把握機器底層,從微觀理解對象構造
- 語言構造
- 編譯轉換
- 內存模型
- 運行時機制。
向下深入理解三大面向對象機制
封裝,隱藏內部實現
繼承,復用現有代碼
多態,改寫對象行為
抽象思維:向上,如何將現實世界抽象為程序代碼。
- 面向對象
- 組件封裝
- 設計模式
- 架構模式。
向上深刻把握面向對象機制帶來的抽象意義,理解如何利用這些機制來表達現實世界,掌握什麽是”好的面向對象設計”。
解決軟件設計的復雜性:
- 分解:人們面對復雜問題的常見做法即分解,大問題分解為多個小問題,逐個解決。
- 抽象:更高層次來講,人們處理復雜性問題有一個通用的技術,即抽象。忽視變化的細節,而去處理泛華和理想化的對象模型。
重新認識面向對象
- 理解隔離變化:從宏觀層面來看,面向對象的構建方式更能適應軟件變化,並能將變化所帶來的影響減為最小。
- 各司其職:從微觀層面來講,面向對象的方式更強調各個類的”責任”;由於需求變化導致的新增類型不應該影響原來類型的實現,是所謂各負其責。
- 對象是什麽?從語言實現層面來講,對象封裝了代碼和數據;從規格層面來講,對象是一系列可被使用的公共接口;從概念層面來講,對象時某種擁有責任的抽象。
面向對象的設計原則
(1)依賴倒置原則(DIP)
- 高層模塊(穩定)不應該依賴於底層模塊(變化),二者都應該依賴於抽象(穩定)
- 抽象(穩定)不應該依賴於實現細節(變化),實現細節應該依賴於抽象(穩定)
(2)開放封閉原則(OCP)
- 對擴展開放,對更改封閉
- 類模塊應該是可擴展的,但是時不可修改的
(3)單一職責原則(SRP)
- 一個類應該僅有一個引起它變化的原因
- 變化的方向隱含著類的責任
(4)Liskov替換原則(LSP)
- 子類必須能夠替換它們的基類(IS-A)
- 繼承表達類型抽象
(5)接口隔離原則(ISP)
- 不應該強迫子類依賴他們不用的方法
- 接口應該小而完美
(6)優先使用對象組合,而不是類繼承
- 類繼承通常為”白箱復用”,對象組合通常為”黑箱復用”
- 繼承在某種程度上破壞了封裝性,子類父類耦合度高
- 而對象組合則只要求被組合的對象具有良好定義的接口,耦合度低
(7)封裝變化點
- 使用封裝來創建對象之間的分界層,讓設計者可以在分界的一側進行修改,而不會對另一側產生不良影響,從而實現層次間的松耦合。
(8)針對接口編程,而不是針對實現編程
- 不將變量類型聲明為某個特定的具體類,而是聲明為某個接口
- 客戶程序無需獲知對象的具體類型,只需要知道對象所具有的接口
- 減少系統中各部分的依賴關系,從而實現”高內聚,低耦合”的類型設計方案
接口標準化的核心就是分工協作。
將設計原則提升為設計經驗
設計習語:描述與特定編程語言相關的底層模式,技巧慣用法
設計模式:主要描述的是”類與相互通信的對象之間的組織關系”,包括他們的角色,職責,協作等方面
架構模式:描述系統中與基本結構組織關系密切的高層模式,包括系統劃分,職責,以及如何組織他們之間關系的規則
設計模式(1)