JAVA單例模式

 

一、單例的特點
1、單例類只可有一個實例。
2、單例類必須自己創建自己這唯一的實例。
3、單例類必須給所有其他對象提供這一實例。
概括成一句話是:確保一個類只有一個實例,並提供一個全局的訪問點。

 

二、代碼示例

public class Singleton {
  //第一種方式(餓漢式):JVM加載的時候就創建唯一的實例
 private static Singleton singleton = new Singleton();//new 一個自己私有的靜態實例
 private Singleton(){};//定義一個私有的構造函數(。。。)
 public static Singleton getSingleton(){//創建一個公有的靜態獲取實例的方法
  return singleton;
 }
 //構建一個測試方法進行單例測試
 public void testSingleton(){
  System.out.println("The Singleton is success! ");
 }
 
 //第二種方式(懶漢式):1非線程安全的
 private static Singleton singleton ;
 private Singleton(){};
 public static Singleton getSingleton(){
  if(singleton==null){
  singleton = new Singleton();
  }
  return singleton;
}
 
 
 //第二種方式:2多線程安全的
 private static Singleton singleton ;
 private Singleton(){};
 public synchronized static Singleton getSingleton(){
  if(singleton==null){
   singleton = new Singleton();
  }
  return singleton;
 }
 
 
 //第二種方式:3解決多線程安全的及重複枷鎖的問題 
 private static Singleton singleton ;
 private Singleton(){};
 public static Singleton getSingleton(){
  if(singleton==null){
   synchronized(Singleton.class){
    if(singleton == null){
    singleton = new Singleton();
    }
   }
  }
 return singleton;
 }
 //第二種方式:4靜態內部類
     private static class SingletonHolder {   
      private static final Singleton singleton = new Singleton();   
     }   
  
     public static final Singleton getSingleton() {   
      return SingletonHolder.singleton;   
     }   
 
}


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