單例模式

單例模式概述

滾滾歷史拧廊,朝代不斷更迭监徘,但卻存在著永恒定律,比如一個朝代皇帝無論怎么更換吧碾,有且只有一個凰盔,而對于軍隊而言,最高指揮官也是只有一個滤港,因為一山不容二虎廊蜒。
而在計算機系統(tǒng)中趴拧,無論打印機有多少溅漾,我們的打印機后臺處理程序也只有一個,包括其他的像驅(qū)動程序著榴、線程池添履、緩存、日志等脑又,在實際的軟件應(yīng)用當(dāng)中暮胧,很多時候我們都會需要它有且只有唯一的一個實例在工作。
針對這種我們只需要某種類型在特定的場合下只有唯一實例產(chǎn)生工作的場景问麸,就可以使用單例模式來實現(xiàn)往衷。

目的:使得類的一個對象成為該類系統(tǒng)中的唯一實例
定義:一個類有且僅有一個實例,并且自行實例化向整個系統(tǒng)提供

要點
  1. 某個類只能有一個實例
  2. 必須自行創(chuàng)建實例
  3. 必須自行向整個系統(tǒng)提供這個實例
實現(xiàn)
  1. 只提供私有的構(gòu)造方法
  2. 含有一個該類的靜態(tài)私有對象
  3. 提供一個靜態(tài)的公有方法用于創(chuàng)建严卖、獲取靜態(tài)私有對象

單例模式實現(xiàn)

代碼實現(xiàn)方案:餓漢式與懶漢式

餓漢式
//餓漢式:創(chuàng)建對象實例的時候直接初始化  空間換時間
public class SingletonOne {
    //1席舍、創(chuàng)建類中私有構(gòu)造
    private SingletonOne(){
        
    }
    
    //2、創(chuàng)建該類型的私有靜態(tài)實例
    private static SingletonOne instance=new SingletonOne();
    
    //3哮笆、創(chuàng)建公有靜態(tài)方法返回靜態(tài)實例對象
    public static SingletonOne getInstance(){
        return instance;
    }
}
懶漢式
//懶漢式:類內(nèi)實例對象創(chuàng)建時并不直接初始化来颤,直到第一次調(diào)用get方法時,才完成初始化操作
//時間換空間
public class SingletonTwo {
    //1稠肘、創(chuàng)建私有構(gòu)造方法
    private SingletonTwo(){
        
    }
    
    //2福铅、創(chuàng)建靜態(tài)的該類實例對象
    private static SingletonTwo instance = null;
    
    //3、創(chuàng)建開放的靜態(tài)方法提供實例對象
    public static SingletonTwo getInstance(){
        if(instance==null){
            instance=new SingletonTwo();
        }
        return instance;
    }
}
測試
public class Test {
    public static void main(String[] args) {
        //餓漢式
        SingletonOne one = SingletonOne.getInstance();
        SingletonOne two = SingletonOne.getInstance();
        System.out.println(one == two); //true
        //懶漢式
        SingletonTwo one1 =SingletonTwo.getInstance();
        SingletonTwo two1=SingletonTwo.getInstance();
        System.out.println(one1 == two1); //true
    }
}
餓漢式 vs 懶漢式
  1. 餓漢式在類加載時就創(chuàng)建實例项阴,第一次加載速度快滑黔,空間換時間
    懶漢式第一次使用時才進(jìn)行實例化,第一次加載速度慢环揽,時間換空間
  1. 餓漢式線程安全略荡,懶漢式存在線程風(fēng)險
    解決方案:a.同步鎖 b.雙重校驗鎖 c.靜態(tài)內(nèi)部類 d.枚舉

單例模式總結(jié)

優(yōu)點
  1. 在內(nèi)存中只有一個對象,節(jié)省內(nèi)存空間
  2. 避免頻繁的創(chuàng)建銷毀對象,提高性能3、避免對共享資源的多重占用
缺點
  1. 擴展比較困難
  2. 如果實例化后的對象長期不利用薯演,系統(tǒng)將默認(rèn)為垃圾進(jìn)行回收撞芍,造成對象狀態(tài)丟失
適用場景
  1. 創(chuàng)建對象時占用資源過多,但同時又需要用到該類對象
  2. 對系統(tǒng)內(nèi)資源要求統(tǒng)一讀寫跨扮,如讀寫配置信息
  3. 當(dāng)多個實例存在可能弓|起程序邏輯錯誤序无,如號碼生成器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末验毡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帝嗡,更是在濱河造成了極大的恐慌晶通,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哟玷,死亡現(xiàn)場離奇詭異狮辽,居然都是意外死亡,警方通過查閱死者的電腦和手機巢寡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門喉脖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抑月,你說我怎么就攤上這事树叽。” “怎么了谦絮?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵题诵,是天一觀的道長。 經(jīng)常有香客問我层皱,道長性锭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任叫胖,我火速辦了婚禮草冈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臭家。我一直安慰自己疲陕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布钉赁。 她就那樣靜靜地躺著蹄殃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪你踩。 梳的紋絲不亂的頭發(fā)上诅岩,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音带膜,去河邊找鬼吩谦。 笑死,一個胖子當(dāng)著我的面吹牛膝藕,可吹牛的內(nèi)容都是我干的式廷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芭挽,長吁一口氣:“原來是場噩夢啊……” “哼滑废!你這毒婦竟也來了蝗肪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蠕趁,失蹤者是張志新(化名)和其女友劉穎薛闪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俺陋,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡豁延,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腊状。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诱咏。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寿酌,靈堂內(nèi)的尸體忽然破棺而出胰苏,到底是詐尸還是另有隱情,我是刑警寧澤醇疼,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站法焰,受9級特大地震影響秧荆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜埃仪,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一乙濒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卵蛉,春花似錦颁股、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至葡缰,卻和暖如春亏掀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泛释。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工滤愕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怜校。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓间影,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茄茁。 傳聞我的和親對象是個殘疾皇子魂贬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容