Java設計的單例模式(三種寫法)
阿新 • • 發佈:2019-02-01
最近在一些部落格上面看到的單例模式,無一例外都是餓漢和懶漢,這兩個確實是單例模式,但是各有自己的弊端
先上程式碼吧
//餓漢式
class ClassA{
private static final ClassA instance = new ClassA();
public static ClassA newInstance(){
return instance;
}
private ClassA(){}
}
//懶漢式 class ClassB{ private static ClassB instance = null; public static synchronized ClassB newInstance(){ if (instance == null) instance = new ClassB(); return instance; } private ClassB(){} }
不管餓漢式還是懶漢,都有自己的弊端。
一般用到單例模式的物件,都是比較佔用記憶體。餓漢在類載入的時候,就建立了物件,在實際開發中,特別佔用記憶體;懶漢雖然沒有在類載入的時候建立物件,但是效率極低,畢竟有synchronized加鎖,在現在多執行緒的時候,效率自然而然就降低了,下面分享一個兩全其美的辦法
class ClassC{ private static class Holder{ static ClassC instance = new ClassC(); } public static ClassC newInstance(){ return Holder.instance; } private ClassC(){} }
這個方法,利用了靜態內部類,這樣,在類載入的時候並不會載入靜態內部類,而且也完美的解決的多執行緒併發的問題(因為靜態內部類只會在建立一次)。
第一次寫部落格,如果有什麼不對的地方請在回覆指教。