單例模式

一、單例模式定義:
在程序運(yùn)行期間熄赡,一個類有且僅有一個實例對象本谜。

二偎窘、單例模式需要解決的問題:
java創(chuàng)建對象時在棧中保存對象的引用溜在,而真實的對象存在于堆內(nèi)存中掖肋。當(dāng)這個對象
失去所有引用志笼,JVM會在空閑時把篓、或堆內(nèi)存不足時調(diào)用GC進(jìn)行垃圾回收。而有些時
候我們沒有必要針對每一個線程創(chuàng)建一個對象紊浩,此時需要使用單例模式坊谁。例如:編
寫一個類負(fù)責(zé)讀取配置文件滑臊。很顯然配置文件僅僅在類初始化時讀取一次即可雇卷,沒
必要針對每個線程請求生成一個對象重新讀取,這樣做很大程度上消耗了系統(tǒng)性
能。這種情況是使用單例模式的一個典型應(yīng)用場景。有些人在提到單例模式的缺點(diǎn)
時講到:單例模式一般職責(zé)過重,違背了單一職責(zé)原則氧映。其實我認(rèn)為這是一種誤區(qū)
單例模式仍然是一個普通的類脱货,它仍然需要遵守程序設(shè)計原則編寫。職責(zé)過重并非
單例模式的設(shè)計存在缺陷臼疫,而是編程人員沒有遵循設(shè)計原則進(jìn)行編碼烫堤。Spring默認(rèn)
作用域下,每一個Bean都是單例的拔创。是不是可以認(rèn)為富蓄,使用Spring開發(fā)的任何項目
都違背了單一職責(zé)原則呢立倍?任何一種設(shè)計模式都是如此,并非設(shè)計模式本身存在什
么問題变擒,問題在于設(shè)計模式的濫用寝志。

三、單利模式的實現(xiàn)方式:
單例模式典型的實現(xiàn)方式有兩種:餓漢式與懶漢式。還存在很多其他的方式舰攒,其實
都屬于兩種方式的變種。是對這兩種方式做出的優(yōu)化兽叮。我會在接下來的代碼中對這
幾種單 例模式進(jìn)行介紹鹦聪,更多是以代碼中加注釋的方式來解釋每一種設(shè)計模式蒂秘。以
后的文章也會采取這種風(fēng)格

四、餓漢式代碼實現(xiàn):


image.png
    餓漢式單例模式的特點(diǎn):
    基于ClassLoader機(jī)制解決了多線程并發(fā)時的問題规丽,是線程安全的赌莺。不具備懶加載
    的特性艘狭。

五、懶漢式代碼實現(xiàn):


image.png

經(jīng)過雙重if校驗遵倦、sychronized港谊、volatile關(guān)鍵詞處理后的懶漢式,解決了線程安全燥狰、
訪問阻塞的問題斜筐。

六、靜態(tài)內(nèi)部類實現(xiàn)單例模式:


image.png

同樣利用了ClassLoader的機(jī)制解決了線程安全的問題目代,但由于在Singleton類被
被加載時SingletonHolder類沒有被使用榛了,因此具有懶加載的特性煞抬。
七、枚舉:


image.png

默認(rèn)情況下枚舉的創(chuàng)建是線程安全的战坤。該方式能夠防止使用反射創(chuàng)建對象途茫。由于枚舉是在初次訪問時才被加載溪食,因此是具有懶加載特性的。該方式寫法簡潔边败。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笑窜,一起剝皮案震驚了整個濱河市登疗,隨后出現(xiàn)的幾起案子嫌蚤,更是在濱河造成了極大的恐慌脱吱,老刑警劉巖认罩,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垦垂,死亡現(xiàn)場離奇詭異,居然都是意外死亡间校,警方通過查閱死者的電腦和手機(jī)页慷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門酒繁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人找蜜,你說我怎么就攤上這事稳析≌镁樱” “怎么了陈惰?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵毕籽,是天一觀的道長。 經(jīng)常有香客問我溶握,道長蒸播,這世上最難降的妖魔是什么萍肆? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任塘揣,我火速辦了婚禮亲铡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奖蔓。我一直安慰自己铁孵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布檀头。 她就那樣靜靜地躺著暑始,像睡著了一般廊镜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗤朴,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天雹姊,我揣著相機(jī)與錄音吱雏,去河邊找鬼。 笑死歧杏,一個胖子當(dāng)著我的面吹牛犬绒,可吹牛的內(nèi)容都是我干的兑凿。 我是一名探鬼主播眨业,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼龄捡,長吁一口氣:“原來是場噩夢啊……” “哼聘殖!你這毒婦竟也來了奸腺?” 一聲冷哼從身側(cè)響起血久,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤氧吐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筑舅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翠拣,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡误墓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了然想。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦娄。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡弊仪,死狀恐怖熙卡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情励饵,我是刑警寧澤驳癌,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站役听,受9級特大地震影響颓鲜,放射性物質(zhì)發(fā)生泄漏表窘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一甜滨、第九天 我趴在偏房一處隱蔽的房頂上張望乐严。 院中可真熱鬧,春花似錦衣摩、人聲如沸昂验。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甫恩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霎终,已是汗流浹背击困。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工谅海, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撞蜂,地道東北人蝌诡。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓颁湖,卻偏偏與公主長得像抢蚀,于是被迫代替她去往敵國和親思币。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

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

  • 【學(xué)習(xí)難度:★☆☆☆☆毅哗,使用頻率:★★★★☆】直接出處:單例模式梳理和學(xué)習(xí):https://github.com/...
    BruceOuyang閱讀 680評論 1 2
  • 1.單例模式概述 (1)引言 單例模式是應(yīng)用最廣的模式之一闽烙,也是23種設(shè)計模式中最基本的一個捕发。本文旨在總結(jié)通過Ja...
    曹豐斌閱讀 2,942評論 6 47
  • 概念 確保某一個類只有一個實例法挨,而且自行實例化幅聘,并向整個系統(tǒng)提供一個訪問它的全局訪問點(diǎn)惫企,這個類稱為單例類狞尔。 特性 ...
    野狗子嗷嗷嗷閱讀 549評論 0 2
  • 目錄 1研儒、設(shè)計模式簡介 2、什么是單例模式 3冲呢、單例模式應(yīng)用場合 4、單例模式作用 5乘凸、單例模式3個要點(diǎn)/要素 6...
    greensure閱讀 1,319評論 1 10
  • 前言 本文主要參考 那些年冀偶,我們一起寫過的“單例模式”。 何為單例模式客年? 顧名思義,單例模式就是保證一個類僅有一個...
    tandeneck閱讀 2,517評論 1 8