《大話設計模式》中将23種常用的設計模式分為3種類型,建立型、結構型和行為型。設計模式的前提是面向對象程式設計,目的是實作類的高内聚,低耦合,依據是設計模式的幾條原則。
本文主要介紹建立型設計模式,主要有以下幾類:
- 抽象工廠模式
- 建造者模式
- 工廠方法模式
- 原型模式
- 單例模式
建立型模式隐藏了類的執行個體建立的細節, 整個系統面對是抽象類定義的接口,無須關注類執行個體的建立、組合等。
抽象工廠(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種,一種稱為餓漢式,對象被加載時就執行個體化;第二種稱為懶漢式,直到第一次引用時才執行個體化。
參考文獻
大話設計模式 - 程傑 著