創建模式(二)
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、統一一個原型很重要