天天看點

讀書筆記-建立型設計模式

《大話設計模式》中将23種常用的設計模式分為3種類型,建立型、結構型和行為型。設計模式的前提是面向對象程式設計,目的是實作類的高内聚,低耦合,依據是設計模式的幾條原則。

本文主要介紹建立型設計模式,主要有以下幾類:

  1. 抽象工廠模式
  2. 建造者模式
  3. 工廠方法模式
  4. 原型模式
  5. 單例模式

建立型模式隐藏了類的執行個體建立的細節, 整個系統面對是抽象類定義的接口,無須關注類執行個體的建立、組合等。

抽象工廠(Abstract Factory)模式

抽象工廠模式:提供一個建立一系列或相關依賴對象的接口,而無須指定它們具體的類。

如何實作:在簡單工廠和工廠方法的基礎上擴充,定義抽象的工廠,每一個繼承的工廠子類,實作的不是一個,而是多個執行個體的傳回接口。

常見應用:通路資料庫的若幹個資料表的操作。

優點:構造執行個體和用戶端分離。

缺點:開發量增加

建造者(Builder)模式

建造者模式:将一個複雜對象的構造與表示分離,使得同樣的建構過程可以建立不同的表示。

如何實作:定義抽象的Builder,每一個繼承的Builder實作對象各個部件的建構,Director定義整個建構流程,利用具體的Builder構造對象。

常見應用:當一個對象的建構過程穩定,但是建構方法多樣時使用。

優點:對象的構造和表示解耦,要求對象建造順序通常是穩定的。

工廠方法(Factory Method)

工廠方法模式:定義一個用于建立對象的接口,讓子類決定執行個體化哪一個類,工廠模式使一個類的執行個體化延遲到其子類。

如何實作:在簡單工廠模式的基礎上改進,定義一個抽象的父類,子類為一個個具體的工廠,每個子類傳回一個具體的執行個體。

常見應用:工廠方法是通常設計的初始模式,當發現需要更多靈活性時,開始考慮采用别的設計模式。

優點:簡單工廠的進一步抽象和擴充,克服了簡單工廠的封閉-開放原則上的不足。

缺點:每添加一個執行個體,需要添加一個構造執行個體的工廠,增加了開發量。

原型(Prototype)模式

原型模式:用原型執行個體建立指定對象的種類,并且通過拷貝這些原型建立新對象。

如何實作:實作一種深拷貝的方法,可以用這個方法構造新的對象。

常見應用:Java Spring引用bean時,預設是單例模式,scope=singleton;如果scope=prototype,會利用再次建立一個新的bean。

單例(Singleton)模式

單例模式:保證一個類僅有一個執行個體,并提供一個通路它的全局通路點。

如何實作:将構造函數定義為private,類中持有一個執行個體,并提供一個public static的方法傳回執行個體。但是要注意,對于多線程的實作要有加鎖和2次持有執行個體的判空操作。

常見應用:Java 中的單測樣例, @Test為單例模式

建立方式:單例模式的建立有2種,一種稱為餓漢式,對象被加載時就執行個體化;第二種稱為懶漢式,直到第一次引用時才執行個體化。

參考文獻

大話設計模式 - 程傑 著

繼續閱讀