Java設計模式(二)Prototype(原型),Builder和Singleton(單態)

創建模式(二)

Singleton(單態)

確保每個類只有一個實例,並提供它的全局訪問點

 

個人認爲這是個最簡單的模式,一般在以下情況下使用

當一個類只能有一個實例,而且用戶可以從一個衆所周知的訪問點訪問它時,如非共享資源

 

 

Singleton的結構圖很簡單,就是一個類圖

但這是一個特殊的類

1、私有的構造器

2、所有的域都是私有的

3、只有一個公有方法

1和2是爲了確保 “每個類只有一個實例”,而3則是提供它的全局訪問

 

除上術實現形式外 ,還可以用synchronized(傳說中的lazy initialization)

大家查看代碼查找區別:

 

 

Builder

將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.


在軟件系統中,有時候面臨着“一個複雜對象”的創建工作,其通常由各個部分的子對象用一定的算法構 成;由於需求的變化,這個複雜對象的各個部分經常面臨着劇烈的變化,但是將它們組合在一起的算法確相對穩定。如何應對這種變化?如何提供一種“封裝機制” 來隔離出“複雜對象的各個部分”的變化,從而保持系統中的“穩定構建算法”不隨着需求改變而改變?這就是要說的建造者模式。

 

使用情況

1、需要生成的產品對象有複雜的內部結構。如果很簡單的話,那麼使用這個模式可能就沒有必要了。
2、需要生成的產品對象的屬性相互依賴,建造者模式可以強迫生成順序。
3、在對象創建過程中會使用到系統中的一些其它對象,這些對象在產品對象的創建過程中不易得到。

 

 

主要參與者:

Builder建造

Director負責實現

ConcreateBuilder建造

Product實際要構建的產品,Client最終使用Product 的部分

 

要點

1、各部分分工職權明確,比如

Director負責監督 Builder構建並得到最後的產品

Client只能從Director處拿到 產品,不管你的生產過程

Builder生產並於Director

2、實現的是複雜產品(單個) 的生產過程

 

與工廠模式的區別:
工廠模式主要是涉及到產品的創建,並且產品只有極其簡單的構建過程或者根本就不需要額外的構建。
而Builder模式則恰恰相反,它主要構建有複雜的構建過程的產品。

工廠模式一般涉及多個產品的創建,而builder模式只負責創建一個產品。


Prototype(原型)

通過給出一個原型對象來指明所要創建的對象類型,然後用複製這個原型對象的辦法創建出更多的同類型對象。

 

在軟件系統中,經常面臨着“某些結構複雜的對象”的創建工作;由於需求的變化,這些對象經常面臨着劇烈的變化,但是它卻擁有比較穩定一致的接口。如何應對這種變化?如何向“客戶程序(使用這些對象的程序)”隔離出“這些易變對象”,從而使得“依賴這些易變對象的客戶程序”不隨着需求改變而改變。

Prototype模式允許一個對象再創建另外一個可定製的對象,根本無需知道任何如何創建的細節,工作原理是:通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原型對象拷貝它們自己來實施創建。

 

使用情況:

(主要的不容易產類的對象)

1、對象的構建十分複雜

2、 對象 經常面臨着劇烈的變化

 

主要參與者:

Prototype(原型)

具體形式

Client使用者


要點

1、解決如何clone的問題

2、統一一個原型很重要

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章