設(shè)計(jì)模式之單例模式

在寫Spring Boot 2.0.2-webmvc源碼分析系列的文章時(shí)暑中,當(dāng)時(shí)提到了Servlet單例模式挖胃。所以就想著寫一篇文章來介紹以下單例模式辽剧,其實(shí)網(wǎng)上類似這種設(shè)計(jì)模式的文章很多族淮,23種設(shè)計(jì)模式大家可能都看過椭迎,早些時(shí)候自己也都看過彰阴,基本上只對(duì)常用的幾種印象比較深刻瘾敢,其余不常用的差不多都忘記了。既然提到了單例模式,那就仔細(xì)介紹一下簇抵。再加深一下印象庆杜。

單例模式定義:

單例模式,屬于創(chuàng)建類型的一種常用的軟件設(shè)計(jì)模式碟摆。通過單例模式的方法創(chuàng)建的類在當(dāng)前進(jìn)程中只有一個(gè)實(shí)例晃财。

我覺得學(xué)習(xí)設(shè)計(jì)模式,主要可以從以下四個(gè)方面著手典蜕。

1断盛、該設(shè)計(jì)模式的一般使用場(chǎng)景。
2嘉裤、該設(shè)計(jì)模式的實(shí)現(xiàn)郑临。
3、該設(shè)計(jì)模式主要解決的問題及優(yōu)點(diǎn)屑宠。
4厢洞、該設(shè)計(jì)模式的不足之處。

單例模式的一般使用場(chǎng)景典奉,下面列舉常見的幾種:

1躺翻、一般的應(yīng)用系統(tǒng)都有一個(gè)或多個(gè)屬性文件存放系統(tǒng)配置,這樣的應(yīng)用可以使用一個(gè)單例對(duì)象來管理這些屬性文件 卫玖。
2公你、 網(wǎng)站的計(jì)數(shù)器,一般可以使用單例模式實(shí)現(xiàn)假瞬,不然數(shù)據(jù)很難同步陕靠。
3、系統(tǒng)的日志應(yīng)用脱茉,一般可以使用單例模式實(shí)現(xiàn)剪芥,由于共享的日志文件一直處于打開狀態(tài),因?yàn)橹荒苡幸粋€(gè)實(shí)例去操作琴许,否則內(nèi)容不好追加税肪。
4、應(yīng)用的配置信息讀取榜田,一般也使用單例模式益兄,由于配置文件是共享的資源。為了保證數(shù)據(jù)的唯一性箭券,可以使用單例對(duì)象進(jìn)行獲取净捅。
5、線程池的設(shè)計(jì)一般也是采用單例模式邦鲫,由于線程池要對(duì)池中的線程進(jìn)行控制灸叼。

下面簡(jiǎn)單列舉一下使用單例模式的優(yōu)點(diǎn)神汹。

1、 由于單例模式在內(nèi)存中只有一個(gè)實(shí)例古今,所以一定程度上可以減少內(nèi)存消耗屁魏,特別是一個(gè)對(duì)象需要頻繁地創(chuàng)建銷毀時(shí),會(huì)影響系統(tǒng)的性能捉腥,使用單例模式就非常明顯了氓拼。
2、由于單例模式只生成一個(gè)實(shí)例抵碟,當(dāng)一個(gè)對(duì)象實(shí)例需要比較多的資源時(shí)桃漾,如讀取配置信息,則可以通過在應(yīng)用啟動(dòng)時(shí)直接產(chǎn)生一個(gè)單例對(duì)象拟逮,然后放入內(nèi)存的方式來優(yōu)化撬统。
3、單例模式可以避免對(duì)資源的多重占用敦迄,例如一個(gè)寫文件操作恋追,由于只有一個(gè)實(shí)例存在內(nèi)存中,避免對(duì)同一個(gè)資源文件的同時(shí)寫操作罚屋。
4苦囱、單例模式可以在系統(tǒng)設(shè)置全局的訪問點(diǎn),優(yōu)化和共享資源訪問脾猛。

除了優(yōu)點(diǎn)之外撕彤,當(dāng)然也還有一些不足:

1、單例模式?jīng)]有接口猛拴,如果需要擴(kuò)展羹铅,每次都得改代碼。
2愉昆、使用的場(chǎng)景比較單調(diào)睦裳,如果是在多場(chǎng)景不斷變化的實(shí)例對(duì)象最好不要使用單例,數(shù)據(jù)容易出問題撼唾。

下面簡(jiǎn)單介紹以下實(shí)現(xiàn)方式,單例模式的實(shí)現(xiàn)方式有多種哥蔚,不同的實(shí)現(xiàn)方式有不同的優(yōu)缺點(diǎn)倒谷,這里介紹一種生產(chǎn)環(huán)境中常用的實(shí)現(xiàn)方式(靜態(tài)內(nèi)部類實(shí)現(xiàn)),其它幾種方式也不建議使用糙箍,所以就不一一列舉了渤愁,掌握下面這種就夠用了。

public class Singleton {
    
    private Singleton() { }
    
    public static Singleton getInstance(){
        return SingletonInstance.INSTANCE;
    }
    
    private static class SingletonInstance{
        static Singleton INSTANCE = new Singleton();
    }
}

使用上面這種單例模式的好處可以保證以下幾點(diǎn)

1深夯、Singleton最多只有一個(gè)實(shí)例抖格,前提是在不考慮反射突破訪問限制的情況下诺苹。
2、保證了即使在高并發(fā)情況下雹拄,也不會(huì)產(chǎn)生多個(gè)實(shí)例收奔。
3、保證了在高并發(fā)情況下滓玖,不會(huì)訪問到未初始化完成的對(duì)象造成系統(tǒng)異常問題坪哄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市势篡,隨后出現(xiàn)的幾起案子翩肌,更是在濱河造成了極大的恐慌,老刑警劉巖禁悠,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞳浦,死亡現(xiàn)場(chǎng)離奇詭異远豺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門朋魔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冷冗,你說我怎么就攤上這事吱窝。” “怎么了拦英?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蜒什,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我疤估,道長(zhǎng)灾常,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任铃拇,我火速辦了婚禮钞瀑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慷荔。我一直安慰自己雕什,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布显晶。 她就那樣靜靜地躺著贷岸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磷雇。 梳的紋絲不亂的頭發(fā)上偿警,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音唯笙,去河邊找鬼螟蒸。 笑死盒使,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的七嫌。 我是一名探鬼主播少办,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抄瑟!你這毒婦竟也來了凡泣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤皮假,失蹤者是張志新(化名)和其女友劉穎鞋拟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惹资,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贺纲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了褪测。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猴誊。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侮措,靈堂內(nèi)的尸體忽然破棺而出懈叹,到底是詐尸還是另有隱情,我是刑警寧澤分扎,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布澄成,位于F島的核電站,受9級(jí)特大地震影響畏吓,放射性物質(zhì)發(fā)生泄漏墨状。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一菲饼、第九天 我趴在偏房一處隱蔽的房頂上張望肾砂。 院中可真熱鬧,春花似錦宏悦、人聲如沸镐确。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辫塌。三九已至,卻和暖如春派哲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掺喻。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工芭届, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留储矩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓褂乍,卻偏偏與公主長(zhǎng)得像持隧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逃片,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • 概述 單例模式是應(yīng)用最廣的模式之一屡拨,在應(yīng)用這個(gè)模式時(shí),單例對(duì)象的類必須保證只有一個(gè)實(shí)例存在褥实。許多時(shí)候整個(gè)系統(tǒng)只需要...
    劉滌生閱讀 1,020評(píng)論 0 5
  • 單例模式(Singleton Pattern)是最簡(jiǎn)單的一種設(shè)計(jì)模式呀狼。下面讓我們開始學(xué)習(xí)單例模式。 一损离、基本介紹 ...
    冰鑒IT閱讀 1,114評(píng)論 1 19
  • 一.什么是單例模式 單例模式的定義:確保一個(gè)類只有一個(gè)實(shí)例哥艇,并提供一個(gè)訪問他的全局訪問點(diǎn)。單例模式是幾個(gè)設(shè)計(jì)模式中...
    Geeks_Liu閱讀 2,225評(píng)論 0 10
  • 1 單例模式的定義 定義:確保某一個(gè)類只有一個(gè)實(shí)例僻澎,自行實(shí)例化并且向整個(gè)系統(tǒng)提供這個(gè)實(shí)例貌踏。單例模式的通用類圖如下所...
    Jerry_1116閱讀 861評(píng)論 0 0
  • 之前在開發(fā)中老用到一些設(shè)計(jì)模式可是呢又不是很懂,于是狠下心來琢磨一番窟勃。下面是我琢磨后總結(jié)的祖乳,希望對(duì)您有用。如果發(fā)現(xiàn)...
    于闐閱讀 2,817評(píng)論 2 5