創(chuàng)建模式-singleon單例模式
一:使用場景
1)經(jīng)常使用的地方:一個類只有一個實例,eg:頁面訪問統(tǒng)計pv,統(tǒng)計的個數(shù)就只能保證一個實例的統(tǒng)計。
2)我們目前使用的情況:比如我想創(chuàng)建一個對象,這個對象希望只有一份實例的維護(hù),在內(nèi)存的保存也只有一份,也就是在同一個jvm的java堆里只保存一份實例對象,所以你會想一辦法,在創(chuàng)建這個對象的時候,就已經(jīng)能保證只有一份。
3)怎么改進(jìn):定義該對象的時候,就保證是同一份實例,比如:定義為私有構(gòu)造函數(shù),防止通過new的方式可以創(chuàng)建對象,然后在對象里定義一個靜態(tài)的私有成員(本身對象的一個實例),然后再創(chuàng)建一個外面訪問該對象的方法就好了。
4)改進(jìn)的好處:代碼在編譯代碼這個級別就被控制了,不至于在jvm里運行的時候才來保證,把唯一實例的創(chuàng)建保證在編譯階段;jvm里內(nèi)存只有一份,從而內(nèi)存占有率更低,以及更方便java垃圾回收
5)改進(jìn)后的壞處:只能是代碼稍微需要更多點,其實大家最后發(fā)現(xiàn)改進(jìn)后的壞處,都是代碼定義比之間要多一點,但以后的維護(hù)代碼就降下來了,也短暫的代碼量偏大來換取以后代碼的精簡。
二:一個實際的例子
總體的例子
package com.mike.pattern.singleton;
/**
* 總統(tǒng)
*
* @author taoyu
*
* @since 2010-6-22
*/
public class President {
private President(){
System.out.println("總統(tǒng)已經(jīng)選舉出來了");
}
/**總統(tǒng)只有一個*/
private static President president=new President();
/**
* 返回總統(tǒng)
*/
public static President getPresident(){
return president;
}
/**
* 總統(tǒng)宣布選舉成功
*/
public void announce(){
System.out.println("偉大的中國人民,我將成你們新的總統(tǒng)");
}
}
/**
* @param args
*/
public static void main(String[] args) {
President president=President.getPresident();
president.announce();
}
posted on 2012-08-06 17:33 陳睿 閱讀(475) 評論(0) 編輯 收藏 所屬分類: 設(shè)計模式