Posted on 2007-05-30 10:11
zht 閱讀(317)
評論(0) 編輯 收藏 所屬分類:
設計模式
Singleton應該說是平時用的最多的一種模式之一
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種形式:
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪? //注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問 public static Singleton getInstance() { return instance; } //當程序第一次調用getInstance的時候初始化Singleton 類 同時初始化static字段 產生唯一的對象實例 }
|
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次 //使用時生成實例,提高了效率! if (instance==null) instance=new Singleton(); return instance; }
}
|
使用Singleton.getInstance()可以訪問單態類。
上面第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,以后就不用再生成了。
注意到lazy initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那么使用getInstance()是有可能得到多個Singleton實例。
一般認為第一種形式要更加安全些。