Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
在很多操作中,比如建立目錄 數據庫連接都需要這樣的單線程操作。
還有, singleton能夠被狀態(tài)化; 這樣,多個單態(tài)類在一起就可以作為一個狀態(tài)倉庫一樣向外提供服務,比如,你要論壇中的帖子計數器,每次瀏覽一次需要計數,單態(tài)類能否保持住這個計數,并且能synchronize的安全自動加1,如果你要把這個數字永久保存到數據庫,你可以在不修改單態(tài)接口的情況下方便的做到。
另外方面,Singleton也能夠被無狀態(tài)化。提供工具性質的功能,
Singleton模式就為我們提供了這樣實現的可能。使用Singleton的好處還在于可以節(jié)省內存,因為它限制了實例的個數,有利于Java垃圾回收(garbage collection)。
我們常常看到工廠模式中類裝入器(class loader)中也用Singleton模式實現的,因為被裝入的類實際也屬于資源。
下面來看看例子
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
System.out.println("已產生對象實例。");
}
public static Singleton getInstance() {
return singleton;
}
測試類
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Start
.");
System.out.println("start obj1");
Singleton obj1 = Singleton.getInstance();
System.out.println("end obj1");
System.out.println("start obj2");
Singleton obj2 = Singleton.getInstance();
System.out.println("end obj2");
if(obj1 == obj2) {
System.out.println("對象是同一個對象");
} else {
System.out.println("對象不是同一個對象");
}
System.out.println("End
.");
}
}
運行測試類,看到控制臺的輸出如下:
Start....
start obj1
已產生對象實例。
end obj1
start obj2
end obj2
對象是同一個對象
End....
我們從上面開始看,在start obj1和end obj1直接輸出了“已產生對象實例”說明有對象產生了,而start obj2和end obj2之間卻沒有打印,為什么呢?因為取得obj2對象的時候并沒有再創(chuàng)建新的對象,而是去拿到跟obj1同一個對象,在Singleton類中已經創(chuàng)建了這個對象,并且是static的,這樣也就可以解釋后面的輸出“對象是同一個對象”這句話了。
posted on 2009-10-14 15:13
老丁 閱讀(316)
評論(0) 編輯 收藏 所屬分類:
設計模式