JAVA單例模式理解
阿新 • • 發佈:2019-01-23
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例項。