原創|其它|編輯:郝浩|2009-09-29 13:51:17.000|閱讀 697 次
概述:本文詳細介紹了Java Singleton單例模式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Singleton (單例模式)
Intent :Ensure a class only has one instance , and provide a global point of access of it.
瞎談:就是保證一個類只有一個實例,并且提供一個全局可訪問的點。打個比方,廣州限制每戶人家養狗,但是只能養一條。一開始你沒有狗,你去買一條。若干年后,狗不行失蹤了。你為了填補寂寞的空虛,別人又送你一條(或者還是你自己買的)。我們不關注你的狗來源,只保證你家的狗每時每刻就一條。你為了確保以后養狗方便,就到保險公司辦了保險,他們承諾,你的狗要是出現意外事故,他們負責陪一條給你。從此,你自由了,狗的事情交給別人了,而且別人也保證只給一條給你。
正經:很多時候我們要保證類的實例只有一個。我們可能在自己的代碼中判斷需要的類的實例有無,無就new一個。這樣看似不錯。問題是,你用到這個類的地方有n個,這樣你就需要n個判斷。為什么不把這個職責交給類本身呢?然后讓類提供一個接口訪問
代碼實現:
public class Singleton
{
private static Singleton singleton=null;
private Singleton()
{}
public static Singleton instance()
{
if(singleton==null)
singleton = new Singleton();
return singleton
return singleton;
}
}
有無問題:碰上多線程怎么辦?涼拌了。加鎖吧,或者。。。前人總結的經驗,有3中方法
1. 直接加鎖
public class Singleton
{
private static Singleton singleton=null;
private Singleton()
{}
public static synchronized Singleton instance()
{
if(singleton==null)
singleton = new Singleton();
return singleton
return singleton;
}
}
2. 早期實例化
public class Singleton
{
private static Singleton singleton = new Singleton();
private Singleton();
public static Singleton getInstance()
{
return singleton;
}
}
3. 雙重檢測鎖
public class Singleton
{
private volatile static Singleton singleton=null;
private Singleton(){}
public static Singleton getInstance()
{
if(singleton==null)
{ synchronized(Singleton.class)
{
singleton=new Singleton();
}
}
return singleton;
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:IT專家網