我的博客園:https://www.cnblogs.com/djhzzl/p/14378952.html
單例模式
單例(Singleton)模式是設計模式之一,最顯著的特點就是一個類在一個JVM中只有一個實體,避免繁瑣的創建銷毀實體,
public class Singleton_Test {
private Singleton_Test(){
System.out.println("私有化構造方法");
}
}

構造方法私有化(private),外部無法new實體化,
所以提供一個public static 方法 getInstance(),外部通過這個方法獲取物件,并且由于是 實體化的同一個類,所以外部每次呼叫都是呼叫同一個方法,從而實作一個類只有一個實體,
public static void main(String args[]) {
Singleton_Test test1 = Singleton_Test.getInstance();
Singleton_Test test2 = Singleton_Test.getInstance();
System.out.println(test1 == test2);
/*輸出
私有化構造方法
true
*/
}
實體化的是同一個類,只呼叫一次構造方法,
餓漢式
這種方式無論是否呼叫,加載時都會創建一個實體,
private static Singleton_Test Instance = new Singleton_Test();
public static Singleton_Test getInstance(){
return Instance;
}
懶漢式
這種方式,是暫時不實體化,在第一次呼叫發現為null沒有指向時,再實體化一個物件,
private static Singleton_Test Instance ;
public static Singleton_Test getInstance(){
if (Instance == null){
Instance = new Singleton_Test();
}
return Instance;
}
區別
-
餓漢式的話是宣告并創建物件(他餓),懶漢式的話只是宣告物件(他懶),在呼叫該類的 getInstance() 方法時才會進行 new物件,
-
餓漢式立即加載,會浪費記憶體,懶漢式延遲加載,需要考慮執行緒安全問題 什么是執行緒安全/不安全
-
餓漢式基于 classloader 機制,天生實作執行緒安全,懶漢式是執行緒不安全,需要加鎖 (synchronized)校驗等保證單例,會影響效率
單例模式要點
-
構造方法私有化
private Singleton_Test(){} -
私有靜態(static)類屬性指向實體
private static Singleton_Test Instance -
使用公有靜態方法回傳實體
public static Singleton_Test getInstance(){ return Instance;}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257051.html
標籤:其他
