1. 程式人生 > >JAVA單例模式理解

JAVA單例模式理解

Java Singleton模式主要作用是保證在Java應用程式中,一個類Class只有一個例項在。 使用Singleton的好處還在於可以節省記憶體,因為它限制了例項的個數,有利於Java垃圾回(garbage collection)

餓漢式:初始化好,用的時候直接拿
public class Singleton{
     private static Singleton  instance = new Singleton();
     private Singleton(){}  //在自己內部定義自己一個例項,是不是很奇怪?
                                //注意這是private 只供內部呼叫
     public static Singleton getInstance(){  //這裡提供了一個供外部訪問本class的靜態方法,可以直接訪問 
          return instance;
     }     
}


懶漢式:需要的時候才初始化
public class Singleton{
     private static Singleton instance= null;
     private Singleton(){}
    public  static synchronized Singleton getInstance(){   //這個方法比上面有所改進,不用每次都進行生成物件,只是第一次     
                                                                           //使用時生成例項,提高了效率!
          if(instance == null){
               instance = new  Singleton();
          }
          return instance;
     }
}

上面第二中形式是lazy initialization,也就是說第一次呼叫時初始Singleton,以後就不用再生成了。
一般認為第一種形式要更加安全些。
注意到lazy initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那麼使用getInstance()是有可能得到多個Singleton例項。