單例模式的幾種實現

2021-09-26 06:10:19 字數 1188 閱讀 9682

1、餓漢式(執行緒安全,呼叫效率高,但是不能延時載入):

public class imageloader 

public static imageloader getinstance()

}

一上來就把單例物件建立出來了,要用的時候直接返回即可,這種可以說是單例模式中最簡單的一種實現方式。但是問題也比較明顯。單例在還沒有使用到的時候,初始化就已經完成了。也就是說,如果程式從頭到位都沒用使用這個單例的話,單例的物件還是會建立。這就造成了不必要的資源浪費。所以不推薦這種實現方式。

2.懶漢式(執行緒安全,呼叫效率不高,但是能延時載入):

public class singletondemo2 

//方法同步,呼叫效率低

public static synchronized singletondemo2 getinstance()

return instance;

}}

3.double checklock實現單例:dcl也就是雙重鎖判斷機制(由於jvm底層模型原因,偶爾會出問題,不建議使用):

public class singletondemo5 

public static singletondemo5 newinstance() }}

return singletondemo5;

}}

4.靜態內部類實現模式(執行緒安全,呼叫效率高,可以延時載入)

public class singletondemo3 

private singletondemo3(){}

public static singletondemo3 getinstance()

}

5.列舉類(執行緒安全,呼叫效率高,不能延時載入,可以天然的防止反射和反序列化呼叫)

public enum singletondemo4 

}

如何選用:

-單例物件 占用資源少,不需要延時載入,列舉 好於 餓漢

-單例物件 占用資源多,需要延時載入,靜態內部類 好於 懶漢式

參考:

單例模式幾種實現

1.單執行緒模式下,推薦懶載入 public class singleton1 public static singleton1 getinstance return singleton 2.上述1演示,執行緒不安全,最容易想到的變為執行緒安全的方式就是加關鍵字synchronized public...

單例模式的幾種實現

首先說明 singleton 是乙個單詞,不是乙個複合詞。接下來步入正題。對於單例模式無論是 餓漢 還是 懶漢 都必須要有的是 一.私有建構函式 二.宣告靜態單例物件 如果是 懶漢 的話為了寫出好的沒有 bug的單例 還應注意 三.構造單例物件之前要加鎖 lock乙個靜態的object物件 四.需要...

單例模式的幾種實現

單例模式,是設計模式之一,目的是為了只提供乙個物件,單例模式的實現,一般需要滿足 1 構造器私有 2 提供乙個共有的外界訪問例項的方法 以下提供單例模式的幾種實現方式 單例 餓漢式 public class eagersingleton 獲取例項的公共方法 public static eagersi...