1. 程式人生 > 其它 >Java_常用設計原則和設計模式

Java_常用設計原則和設計模式

第二十一章 常用設計原則和設計模式

21.1 常用的設計原則(記住)

21.1.1 軟體開發的流程

  • 需求分析文件、概要設計文件、詳細設計文件、編碼和測試、安裝和除錯、維護和升級

21.1.2 常用的設計原則

  • 開閉原則(Open Close Principle)
    • 對擴充套件開放對修改關閉,為了使程式的擴充套件性好,易於維護和升級。
  • 里氏代換原則(Liskov Substitution Principle)
    • 任何基類可以出現的地方,子類一定可以出現,多使用多型的方式。
  • 依賴倒轉原則(Dependence Inversion Principle)
    • 儘量多依賴於抽象類或介面而不是具體實現類,對子類具有強制性和規範性
  • 介面隔離原則(Interface Segregation Principle)
    • 儘量多使用小介面而不是大介面,避免介面的汙染,降低類之間耦合度。
  • 迪米特法則(最少知道原則)(Demeter Principle)
    • 一個實體應當儘量少與其他實體之間發生相互作用,使系統功能模組相對獨立。
    • 高內聚,低耦合。
  • 合成複用原則(Composite Reuse Principle)
    • 儘量多使用合成/聚合的方式,而不是繼承的方式。

21.2 常用的設計模式

21.2.1 基本概念

  • 設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。
  • 設計模式就是一種用於固定場合的固定套路。

21.2.2 基本分類

  • 建立型模式 - 單例設計模式、工廠方法模式、抽象工廠模式、...
  • 結構型模式 - 裝飾器模式、代理模式、...
  • 行為型模式 - 模板設計模式、...

21.3 設計模式詳解(重點)

21.3.1 單例設計模式

  • 單例設計模式主要分為:餓漢式 和 懶漢式,懶漢式需要對多執行緒進行同步處理。

21.3.2 普通工廠模式
(1)基本概念

  • 普通工廠方法模式就是建立一個工廠類,對實現了同一介面的不同實現類進行例項的建立。

(2)類圖結構

(3)主要缺點

  • 在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,並且可能出現空指標異常。

21.3.3 多個工廠方法模式

(1)類圖結構

(2)主要缺點

  • 在多個工廠方法模式中,為了能夠正確建立物件,先需要建立工廠類的物件才能呼叫工廠類中的生產方法。

21.3.4 靜態工廠方法模式

(1)類圖結構

(2)實際意義

  • 工廠方法模式適合:凡是出現了大量的產品需要建立且具有共同的介面時,可以通過工廠方法模式進行建立。

(3)主要缺點

  • 工廠方法模式有一個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式生產新的產品,就必須對工廠類的程式碼進行修改,這就違背了開閉原則。

21.3.5 抽象工廠模式

(1)類圖結構

21.3.6 裝飾器模式

(1)基本概念

  • 裝飾器模式就是給一個物件動態的增加一些新功能,要求裝飾物件和被裝飾物件實現同一個介面,裝飾物件持有被裝飾物件的例項。

(2)類圖結構

(3)實際意義

  • 可以實現一個類功能的擴充套件。
  • 可以動態的增加功能,而且還能動態撤銷(繼承不行)。
  • 缺點:產生過多相似的物件,不易排錯。

21.3.7 代理模式

(1)基本概念

  • 代理模式就是找一個代理類替原物件進行一些操作。
  • 比如我們在租房子的時候找中介,再如我們打官司需要請律師,中介和律師在這裡就是我們的代理。

(2)類圖結構

(3)實際意義

  • 如果在使用的時候需要對原有的方法進行改進,可以採用一個代理類呼叫原有方法,並且對產生的結果進行控制,這種方式就是代理模式。
  • 使用代理模式,可以將功能劃分的更加清晰,有助於後期維護。

(4)代理模式和裝飾器模式的比較

  • 裝飾器模式通常的做法是將原始物件作為一個引數傳給裝飾者的構造器,而代理模式通常在一個代理類中建立一個被代理類的物件。
  • 裝飾器模式關注於在一個物件上動態的新增方法,然而代理模式關注於控制對物件的訪問。

21.3.8 模板方法模式

(1)基本概念

  • 模板方法模式主要指一個抽象類中封裝了一個固定流程,流程中的具體步驟可以由不同子類進行不同的實現,通過抽象類讓固定的流程產生不同的結果。

(2)類圖結構

(3)實際意義

  • 將多個子類共有且邏輯基本相同的內容提取出來實現程式碼複用。
  • 不同的子類實現不同的效果形成多型,有助於後期維護。