1. 程式人生 > >設計模式(1)

設計模式(1)

認識 res 子類 CP 獲得 適應 優先 color 創建對象

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)