單例模式 建立獨一無二的物件

2021-08-25 05:35:23 字數 1424 閱讀 8321

單例模式(singleton pattern): 用來建立獨一無二的,只能有乙個例項的物件的入場券。

作用:有些物件我們只需要乙個,比如:執行緒池、快取、對話方塊、處理偏好設定、登錄檔等物件,這些物件只能有乙個例項,如果製造出多個例項,就會導致很多問題產生,例如:程式行為異常、資源使用過量、或者是不一致的結果。

當我們建立乙個物件的時候,只需要new myobject()即可。假設有這麼乙個類,我們需要保證只能夠例項化它一次,那麼該如何實現呢?

可以這麼做:讓這個類含有乙個私有構造器,使得除本身之外的所有類都不能夠對其實例化。在myclass定義乙個私有構造器,乙個靜態方法getinstance(),使用myclass.getinstance()方法呼叫得到乙個例項物件。

public myclass

public static myclass getinstance()

}

乙個經典的單例模式實現(延遲例項化----懶漢式):

package com.designpattern;

public class singleton

//getinstance()方法例項化物件,並返回這個例項

public static synchronized singleton getinstance()

return uniqueinstance;}}

這樣就可以保證singleton物件是獨一無二的,利用單例模式建立而得。當前類沒有公開的構造器,因為它的構造器被宣告為私有的,別人不可能通過new產生多個物件,如何要取得例項,必須發起"請求"得到乙個例項,而不是自行例項化得到乙個例項。

該類有乙個靜態方法,叫做getinstance()。呼叫這個方法,該例項立刻現身,隨時可以工作。事實上,這個例項物件可能是在這次呼叫的時候被建立出來的,也可能是以前很早就被建立出來了。

何為懶漢式:當jvm載入這個類時並沒有立即建立此唯一的單件例項,而是在使用到的時候才建立。

用類圖表示:

另一種實現方式("急切"建立例項:餓漢式):

public class singleton

public static singleton getinstance()

}

利用這個做法,依賴jvm在載入這個類時馬上建立唯一的單件例項。jvm保證在任何執行緒訪問uniqueinstance靜態變數之前,一定先建立此例項。

單例模式----確保乙個類只有乙個例項,並提供乙個全域性訪問點。

獨一無二的單例模式

單例模式被定義為 確保乙個類只有乙個例項,並提供乙個全域性訪問點。單例模式使得乙個類只能有唯一的乙個例項,這意味著不能再使用new關鍵字建立物件,因為一旦可以被new,就可以被多次new。問題1 如何保證乙個類只有乙個例項?問題2 不能使用new如何獲取物件?這兩個問題的答案非常簡單 由於new物件...

單例模式製造獨一無二的物件

為什麼不用靜態全域性變數呢?如果將物件賦值給全域性變數,那麼你必須在程式一開始就建立物件,非常消耗資源。利用單例模式,就可以在需要的時候才建立物件。另外全域性變數可能指向多個物件,這違反了例項唯一性。單例模式確保乙個類有且僅有乙個例項,並提供乙個全域性變數。類圖如下 單例模式典型例子強調三點 1 定...

設計模式系列 搞懂單例模式,我獨一無二

單例模式的定義 乙個類只有乙個例項,且該類能自行建立這個例項,並提供乙個訪問該單例的全域性訪問點。屬於建造型模式。單例模式的實現 餓漢式單例 類載入的時候即初始化並建立單例物件。適用於單例物件較少的情況。public class hungrysingleton public static hungr...