設(shè)計模式——04創(chuàng)建型.單例模式

單例模式定義:保證一個類僅有一個實例她我,并提供一個訪問它的全局訪問點。

所有類都有構(gòu)造方法谷誓,不編碼則系統(tǒng)默認(rèn)生成空的構(gòu)造方法绒障,若有顯示定義的構(gòu)造方法,默認(rèn)的構(gòu)造方法就會失效捍歪。

通常我們可以讓一個全局變量使得一個對象被訪問户辱,但它不能防止你實例化多個對象,一個最好的辦法就是糙臼,讓類自身負(fù)責(zé)保存它的唯一實例庐镐,這個類可以保證,沒有其他實例可以被創(chuàng)建变逃,并且它可以提供一個訪問該實例的方法必逆。

單例模式因為Singleton類封裝它的唯一實例,這樣它可以嚴(yán)格地控制客戶怎樣訪問它以及何時訪問它韧献。簡單地說就是對唯一實例的受控訪問末患。

單例模式(Singleton)結(jié)構(gòu)圖


Singleton結(jié)構(gòu)圖

Singleton類,定義一個GetInstance操作锤窑,允許客戶訪問它的唯一實例璧针,GetInstance是一個靜態(tài)方法,主要負(fù)責(zé)創(chuàng)建自己的唯一實例渊啰。

1.懶漢模式(線程不安全)


懶漢模式(線程不安全)

申明了一個靜態(tài)對象探橱,在用戶第一次調(diào)用時初始化;

雖然節(jié)約了資源绘证,但是第一次加載時需要實例化隧膏,反應(yīng)稍慢,而且多線程時不能正常工作嚷那;

2.懶漢模式(線程安全)


懶漢模式(線程安全)

lock:確保當(dāng)一個線程位于代碼的臨界區(qū)時胞枕,另一個線程不進入臨界區(qū)。

可以在多線程中工作魏宽,但是每次調(diào)用GetInstance方法時都需要進行同步腐泻,造成不必要的同步開銷,而且大部分時候我們是用不到同步的队询,所以不建議用這種模式派桩。

3.雙重鎖定


雙重鎖定

這種方式采用雙鎖機制,安全且在多線程情況下能保持高性能蚌斩。

4.靜態(tài)初始化


靜態(tài)初始化

C#與公共語言運行庫也提供了一種“靜態(tài)初始化”方法铆惑,這種方法不需要開發(fā)人員顯示地編寫線程安全代碼,即可解決多線程環(huán)境下它是不安全的問題。

這種靜態(tài)初始化的方式是在自己被加載時就將自己實例化员魏,所以被形象地稱之為餓漢式單例類丑蛤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市逆趋,隨后出現(xiàn)的幾起案子盏阶,更是在濱河造成了極大的恐慌晒奕,老刑警劉巖闻书,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脑慧,居然都是意外死亡魄眉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門闷袒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坑律,“玉大人,你說我怎么就攤上這事囊骤』卧瘢” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵也物,是天一觀的道長宫屠。 經(jīng)常有香客問我,道長滑蚯,這世上最難降的妖魔是什么浪蹂? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮告材,結(jié)果婚禮上坤次,老公的妹妹穿的比我還像新娘。我一直安慰自己斥赋,他們只是感情好缰猴,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疤剑,像睡著了一般滑绒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骚露,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天蹬挤,我揣著相機與錄音,去河邊找鬼棘幸。 笑死焰扳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吨悍,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼扫茅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了育瓜?” 一聲冷哼從身側(cè)響起葫隙,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躏仇,沒想到半個月后恋脚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡焰手,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年糟描,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片书妻。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡船响,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躲履,到底是詐尸還是另有隱情见间,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布工猜,位于F島的核電站米诉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏域慷。R本人自食惡果不足惜荒辕,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望犹褒。 院中可真熱鬧抵窒,春花似錦、人聲如沸叠骑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宙枷。三九已至掉房,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慰丛,已是汗流浹背卓囚。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诅病,地道東北人哪亿。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓粥烁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝇棉。 傳聞我的和親對象是個殘疾皇子讨阻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

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