Java 單例模式

原文鏈接:http://www.hubwiz.com/class/572afcc708ce8b3d3a143619

單例

我們都知道面向?qū)ο蟪绦蛟O(shè)計中,最讓人著迷和驚嘆的就是設(shè)計模式了,在學習Java中最常用的就是單例模式了。那么什么是單例模式呢?所謂單例模式就是我們一個對象只能有一個實例芹敌。這么說不是很確切的話還可以這么說,我們經(jīng)常在windows下可以看到一個應用只能打開一個,再次打開的時候不會產(chǎn)生新的進程狂塘。或者大家都喜歡玩游戲鳄厌,很多游戲都不能雙開的荞胡,這其中的原理就是單例模式。

用了這么多語言解決單例模式了嚎,那么怎么樣實現(xiàn)單例模式呢泪漂?下面是一個簡單的例子廊营。

publicclassMain{

privateMain(){}

staticMaininstance=newMain();

staticMaingetInstance(){

returninstance;

}

}

我們來分析一下這個單例模式,先建立了一個私有的默認構(gòu)造方法萝勤,這就保證了在這個類的外部是無法new出這個類的實例的露筒,之后我們在這個類中new出這個類的實例,用一個靜態(tài)方法去返回這個例子敌卓。這樣我們只有調(diào)用getInstance這個方法的時候慎式,才能new出實例。那么這個單例是否有缺陷呢趟径?當然是有的瘪吏,我們使用了靜態(tài)的變量區(qū)new,這就導致了在類加載的時候?qū)嵗呀?jīng)被new了蜗巧,只是我們不能獲得而已掌眠。那么我們接下來就改進一下這個單例模式。

publicclassMain{

privateMain(){}

staticclassT{

staticMaininstance=newMain();

}

staticMaingetInstance(){

returnT.instance;

}

}

這個是改進好的代碼幕屹,這個單例模式中蓝丙,我們使用了一個靜態(tài)內(nèi)部類,但是不會再類加載的時候加載望拖,只是在調(diào)用內(nèi)部類的時候加載渺尘,也就是說,這個方式可以延遲類的加載说敏,有的時候回帶來一定的好處沧烈,不過就是比較麻煩,在對空間沒有太大要求的時候像云,就可以不用這種方式锌雀。

具體實例如下:

classA {

privatestaticvolatileAinstance;

privatestaticReentrantLocklock=newReentrantLock();

privateA() {

System.out.println("Hello");

}

publicstaticSingleton getInstance() {

if(instance==null) {

synchronized(A.class) {

if(instance==null) {

instance=newA();

}

}

}

returnnull;

}

}

singleton:

publicclassSingletonextendsThread {

publicvoidrun() {

super.run();

System.out.println("MyThread");

A.getInstance();

}

publicstaticvoidmain(String[]args) {

Singletons1=newSingleton();

Singletons2=newSingleton();

Singletons3=newSingleton();

s1.start();

s2.start();

s3.start();

}

}

最后出現(xiàn)的結(jié)果就是在控制臺只會輸出一個hello,這就是唯一的一個實例迅诬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腋逆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子侈贷,更是在濱河造成了極大的恐慌惩歉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俏蛮,死亡現(xiàn)場離奇詭異撑蚌,居然都是意外死亡,警方通過查閱死者的電腦和手機搏屑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門争涌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辣恋,你說我怎么就攤上這事亮垫∧H恚” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵饮潦,是天一觀的道長燃异。 經(jīng)常有香客問我,道長继蜡,這世上最難降的妖魔是什么回俐? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮稀并,結(jié)果婚禮上仅颇,老公的妹妹穿的比我還像新娘。我一直安慰自己稻轨,他們只是感情好灵莲,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布雕凹。 她就那樣靜靜地躺著殴俱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枚抵。 梳的紋絲不亂的頭發(fā)上线欲,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音汽摹,去河邊找鬼李丰。 笑死,一個胖子當著我的面吹牛逼泣,可吹牛的內(nèi)容都是我干的趴泌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼拉庶,長吁一口氣:“原來是場噩夢啊……” “哼嗜憔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氏仗,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤吉捶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后皆尔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呐舔,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年慷蠕,在試婚紗的時候發(fā)現(xiàn)自己被綠了珊拼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡流炕,死狀恐怖杆麸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤揭斧,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布莱革,位于F島的核電站,受9級特大地震影響讹开,放射性物質(zhì)發(fā)生泄漏盅视。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一旦万、第九天 我趴在偏房一處隱蔽的房頂上張望闹击。 院中可真熱鬧,春花似錦成艘、人聲如沸断箫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仲义。三九已至,卻和暖如春剑勾,著一層夾襖步出監(jiān)牢的瞬間埃撵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工虽另, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暂刘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓洲赵,卻偏偏與公主長得像鸳惯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叠萍,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

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

  • 1. 實現(xiàn)單例模式 餓漢模式和懶漢模式單例模式根據(jù)實例化時機分為餓漢模式和懶漢模式芝发。餓漢模式,是指不等到單例真正使...
    aaron1993閱讀 221評論 0 0
  • 定義 一個類只有一個實例苛谷,自行實例化并提供給整個系統(tǒng)辅鲸。 基本思路 將該類構(gòu)造函數(shù)私有化,并通過靜態(tài)方法獲取一個唯一...
    劇透下閱讀 233評論 0 0
  • 單例模式簡介 在GoF的23種設(shè)計模式中腹殿,單例模式是比較簡單的一種独悴。然而例书,有時候越是簡單的東西越容易出現(xiàn)問題。下面...
    王帥199207閱讀 1,501評論 0 107
  • 1.爺爺 今年80歲刻炒,16歲開始抽煙决采,抽旱煙和香煙。 煙葉是自家種的坟奥,煙葉長成了树瞭,采摘下來,幾個葉子一捆爱谁,晾曬煙葉...
    阿爾法小丸子閱讀 271評論 0 0
  • 001 項目與日常運營的不同 項目有明確的的起點與終點晒喷,一旦實現(xiàn)目標,隨即終止访敌,有獨特的產(chǎn)品凉敲、服務或成果;而日常運...
    李小川_新晉奶爸閱讀 329評論 2 2