1 ???????? Creational Patterns
將對象的使用與對象的創建分開。對象的使用者不負責創建對象,只需知道如何獲取需
要的對象。這樣,當被使用對象的創建過程需要變更或擴展時,對象的使用者無須變動,只要對專門負責創建該對象的對象工廠做必要的變更或擴展即可。
1.1 ??? The Factory Pattern
1.1.1 ?? 基本類圖
1.1.2 ?? 分析
當 BasicProduct 有新的子產品 ExProduct3 要應用到系統時, Factory 的 createProduct()
需要簡單修改,增加一個“ else if ”分支,沒有完全實現“對擴展開放,對修改封閉”。但當明確產品就是有限的幾種時,仍是有效且常用的。
??????
1.2 ??? The Abstract Factory Pattern
1.2.1 ?? 基本類圖
1.2.2 ?? 分析
當 BasicProduct 有新的子類 ExProduct3 要應用到系統時,新建一個對應的擴展自
BasicFactory 的 ExFactory3 即可,現有類無需修改,實現了“對擴展開放,對修改封閉”。
1.3 ??? The Singleton Pattern
控制系統最多存在某個類的一個實例。很容易將 Singleton Pattern 擴展為控制系統只能
創建某個類的有限個實例的情形。系統中大部分管理服務對象都是單實例的。例如,系統存在多個用戶實例,但只存在一個用戶管理者對象。
1.3.1 ?? 常用實現方式
public
class
Singleton {
???
private
static
Singleton
instance
=
null
;
???
???
private
Singleton() {};
//
控制外部不能自行創建
Sigleton
實例
???
???
public
static
Singleton getInstance() {
??????
if
(
null
==
instance
) {
??????????
instance
=
new
Singleton();
?????? }
??????
return
instance
;
??? }
} |
1.4 ??? The Builder Pattern
1.4.1 ?? 基本類圖
1.4.2 ?? 分析
當一個產品( Product )由多個部分( Part1 , Part2 , … , Partn )組成,而各個部分又有
不同的構造方式時。將產品各部分的構造和產品的組裝分離,就是
Builder Pattern
。
Builder
是對產品各部分構造的抽象,而
Director
負責使用指定的
Builder
組裝產品。這樣,當系統有新的產品各部分構造方式需要加入時,只需實現繼承自
Builder
的
ConcreteBuilder3
即可,系統其他類無需修改,實現了“對擴展開放,對修改關閉”。
1.5 ??? The Prototype Pattern
給定一個對象實例 A ,得到一個另一個對象實例 B : B 的類型與 A 同, B 的內容與 A
相同。常稱 B 為 A 的克隆或副本。
?????? Java 對象模型直接支持 Prototype Pattern ,因為 Java 自帶克隆機制。關于 Java 克隆機制,見隨筆 :http://www.aygfsteel.com/RogerTu/archive/2007/03/18/104532.html 。