單例模式

class Singleton
{
// 使用一個類變量緩存曾經創建的實例
private static Singleton instance;
// 將構造器使用private修飾,隱藏該構造器
private Singleton(){}
// 提供一個靜態方法,用於返回Singleton實例
// 該方法可以加入自定義的控制,保證只產生一個Singleton對象
public static Singleton getInstance()
{
// 如果instance爲null,表明還不曾創建Singleton對象
// 如果instance不爲null,則表明已經創建了Singleton對象,將不會執行該方法
if (instance == null)
{
// 創建一個Singleton對象,並將其緩存起來
instance = new Singleton();
}
return instance;
}

}

優點:減少創建java實例所帶來的系統開銷

會帶來線程安全的問題

線程安全的單例模式

  1. public class Singleton{   
  2.     private static Singleton instance=null;   
  3.     private Singleton(){}   
  4.     public static synchronized Singleton getInstance(){   
  5.         if(instance==null){   
  6.             instance=new Singleton();   
  7.         }   
  8.         return instance;   
  9.     }   
  10. }   

  1. //懶漢式  
  2. class LSingle{  
  3.     private static  Instance _instance = null;   
  4.     private LSingle(){}  
  5.       
  6.     public static Instance getInstance(){  
  7.         if(_instance==null){  
  8.             synchronized(LSingle.class){  
  9.                 _instance = new Instance();  
  10.             }  
  11.         }  
  12.         return _instance;  
  13.     }  
  14. }  
  15. //餓漢式  
  16. class ESingle{  
  17.     private static Instance _instance = new Instance();  
  18.       
  19.     private ESingle(){}  
  20.       
  21.     public static Instance getInstance(){  
  22.         return _instance;  
  23.     }  
  24. }  

         如果實例在系統中不停的被用到,選用餓漢式是不錯的選擇


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