什麼是java單例模式


什麼是單例模式?
單例模式是保證類的實例是單例的一種常見設計模式。
單例模式的優勢:
(1)首先確定是節省內存資源,無論多頻繁的經過暴露的方法建立實例,都能保證建立的對象在系統內存中是同一實例對象;
(2)靈活性,因爲全部實例的建立都由該類控制,全部該類能夠靈活的更改實例化過程;
(3)實例的受控訪問,單例類能夠輕鬆的控制惟一實例的受控訪問;
單例模式的缺點:
(1)單例模式沒有接口,不容易擴展;
(2)使用時不能用反射模式建立單例,不然會實例化一個新的對象;
(3)使用懶單例模式時注意線程安全問題;
實現單例模式的方式:
餓單例方式java

package index;
public class Superman {
//空的構造器
private Superman(){}
//實例化對象
private static Superman supermanInstance = new Superman();
//獲取實例化對象的靜態函數getSupermanInstance()
public static Superman getSupermanInstance(){
return supermanInstance;
}
}

餓單例在類加載的時候就被提早new了出來,一開始就實例化了一個supermanInstance對象,無論你程序須要不要調用這個對象,它都已經準備好了;沒有進行延遲加載,爲了減少程序負載大多數狀況下須要懶加載,因此這種實現單例的方式不是最佳選擇。
懶單例方式(單線程寫法)小程序

package index;
public class Superman {
//空的構造器
private Superman(){}
//實例化對象;只聲明 不使用new進行實例化
private static Superman supermanInstance = null;
//獲取實例化對象的靜態函數getSupermanInstance()
public static Superman getSupermanInstance(){
if(supermanInstance==null){ //若是爲null的狀況再進行實例化
supermanInstance = new Superman();
}
return  supermanInstance;
}
}

聲明一個對象不去實例化它,當程序須要實例化的時候調用靜態工廠方法 getSupermanInstance(),方法中對聲明的對象進行判斷,若是是null的話再去實例化它,這種寫法能夠達到延遲加載的效果,但它是非線程安全的,若在多線程中有兩個線程同時調用靜態工廠方法getSupermanInstance() 就有可能重複的建立該類的實例破壞了單例的惟一性;
以上就是什麼是java單例模式的詳細內容,但願對你有所幫助。
閱讀原文:什麼是java單例模式設計模式

相關文章
相關標籤/搜索