1
????????
Creational Patterns
將對象的使用與對象的創(chuàng)建分開。對象的使用者不負責創(chuàng)建對象,只需知道如何獲取需
要的對象。這樣,當被使用對象的創(chuàng)建過程需要變更或擴展時,對象的使用者無須變動,只要對專門負責創(chuàng)建該對象的對象工廠做必要的變更或擴展即可。
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
擴展為控制系統只能
創(chuàng)建某個類的有限個實例的情形。系統中大部分管理服務對象都是單實例的。例如,系統存在多個用戶實例,但只存在一個用戶管理者對象。
1.3.1
??
常用實現方式
public
class
Singleton {
???
private
static
Singleton
instance
=
null
;
???
???
private
Singleton() {};
//
控制外部不能自行創(chuàng)建
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.tkk7.com/RogerTu/archive/2007/03/18/104532.html
。