單例模式 java

單例模式有一下特點:

1、單例類只能有一個實例。

2、單例類必須自己自己創建自己的唯一實例。

3、單例類必須給所有其他對象提供這一實例。

餓漢式單例類.在類初始化時,已經自行實例化:

public class Singleton1 {
 //私有的默認構造器
 private Singleton1() {}
 //已經自行實例化
 private static final Singleton1 single = new Singleton1();
 //靜態工廠方法
 public static Singleton1 getInstance() {
 return single;
 }
}

懶漢式單例類.在第一次調用的時候實例化:

public class Singleton2 {
 //私有的默認構造器
 private Singleton2() {}
 //注意,這裏沒有 final
 private static Singleton2 single=null;
 //靜態工廠方法
 public synchronized static Singleton2 getInstance() {
 if (single == null) {
 single = new Singleton2();
 }
 return single;
 }
}

優點:

 

(1)由於單例模式在內存中只有一個實例,減少了內存開支,特別是一個對象需要頻繁地創建、銷燬時,而且創建或銷燬時性能又無法優化,單例模式的優勢就非常明顯。 
(2)由於單例模式只生成一個實例,所以減少了系統的性能開銷,當一個對象的產生需要比較多的資源時,比如讀取配置、產生其他依賴對象時,則可以通過在應用啓動時直接產生一個單例對象,然後用永久駐留內存的方式來解決。 
(3)單例模式可以避免對資源的多重佔用,例如一個寫文件操作,由於只有一個實例存在內存中,避免對同一個資源文件的同時寫操作。 
(4)單例模式可以在系統設置全局的訪問點,優化和共享資源訪問,例如,可以設計一個單例類,負責所有數據表的映射處理。

 

缺點:

 

(1)單例模式一般沒有接口,擴展很困難,若要擴展,除了修改代碼基本上沒有第二種途徑可以實現。 
(2)單例對象如果持有Context,那麼很容易引發內存泄露,此時需要注意傳給單例對象的Context最好是Application Context。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章