單例模式是指在應用程式的執行週期內,乙個類始終只有乙個例項,不論在何處訪問都是如此。
一般單例模式有兩種形式。
1、通過私有構造器實現
定義乙個類構造器為private,有乙個private的static變數,初始化的時候例項化;通過乙個public的getinstance方法獲取物件的引用。
public class singleton private static singleton instance = new singleton(); public static singleton getinstance() }
這種方式又稱「餓漢模式」,它在初始化時就生成好了例項,可以避免生成不必要的例項。因此這一種是執行緒安全的。但是它的缺點是不論是不是要使用這個例項,只要引用了,都把這個例項生成好了,造成了資源的浪費;同時對例項化機制的控制少,因為有的時候,會使用這個類的非預設構造器來執行其他任務,而不想造成資源不必要的占用。
2、使用的時候生成
這種方式也是通過public的靜態getinstance方法來獲取物件,但是在獲取的時候判斷後才例項化。
public class singleton }
這種方式解決了第一種方式的缺點,由於它是在使用時生成,又稱為「懶漢模式」。當然這種實現方式對於多執行緒來說又有乙個問題,多執行緒訪問時會生成好幾個例項。因此要改進它,使用lock防止這種現象。
public class singleton } return instance; } }
這就是兩種常見的單模式實現。 讀書筆記4 單例模式
單例模式是指在應用程式的執行週期內,乙個類始終只有乙個例項,不論在何處訪問都是如此。一般單例模式有兩種形式。1 通過私有構造器實現 定義乙個類構造器為private,有乙個private的static變數,初始化的時候例項化 通過乙個public的getinstance方法獲取物件的引用。publi...
設計模式讀書筆記 單例模式
有時候某些物件我們只需要乙個,如 執行緒池 快取 對話方塊等等,對於這類物件我們只能有乙個例項,如果我 們製造出多個例項,就會導致很多問題產生。但是我們怎樣才能保證乙個類只有乙個例項並且能夠便於訪問?這裡我們想到了全域性變數,全域性變數確實是可以 保證該類可以隨時訪問,但是它很難解決只有乙個例項問題...
設計模式讀書筆記 單例模式
有時候某些物件我們只需要乙個,如 執行緒池 快取 對話方塊等等,對於這類物件我們只能有乙個例項,如果我 們製造出多個例項,就會導致很多問題產生。但是我們怎樣才能保證乙個類只有乙個例項並且能夠便於訪問?這裡我們想到了全域性變數,全域性變數確實是可以 保證該類可以隨時訪問,但是它很難解決只有乙個例項問題...