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

引子

最近看完了first head 設(shè)計(jì)模式,這本書,還是很不錯(cuò)的,除了個(gè)別的翻譯看起來不是很舒服,還有,個(gè)人覺得單例模式和裝飾模式寫的不是很好,不過這本書還是推薦大家去讀的.

那我們就從單例模式開始,我們把我看的這些設(shè)計(jì)模式都會(huì)寫出來.加上自己的一些見解,歡迎大家圍觀指正.

單例模式就是一個(gè)類只產(chǎn)生一個(gè)具體實(shí)例的對(duì)象.例如線程池對(duì)象,我們只需要一個(gè)就能夠管理其中所有的線程了,多幾個(gè)線程池對(duì)象完全沒有存在的必要.

還有緩存對(duì)象,一個(gè)系統(tǒng)中一個(gè)就夠了,多了反而不好去維護(hù)它.

單例的核心就是私有化構(gòu)造方法,同時(shí)提供一個(gè)public 方法,對(duì)外提供獲取對(duì)象的方法.

單例最簡(jiǎn)單的就是jdk1.5之后的枚舉類型了,同時(shí)effective java中推薦的獲取單例的方法.

枚舉的單例是直接相當(dāng)于直接創(chuàng)建了一個(gè)對(duì)象,沒有采用延遲加載的方法.

代碼如下:

public enum Single5 {

RED;

}

這就是的了,是不是很簡(jiǎn)單,哈哈.

再進(jìn)行延遲加載的懶漢式了.

我們首先考慮最簡(jiǎn)單的情況:

public class SingleOne {

private static SingleOne instance;//全局變量

private SingleOne(){};//私有化

public static SingleOne getInstance(){

if(instance==null){//第一次訪問沒有,就new了一個(gè)出來了

instance=new SingleOne();

}

return instance;

}

}

在第一次訪問的時(shí)候,會(huì)創(chuàng)建一個(gè)新的對(duì)象出來,以后再次獲取時(shí)候,直接獲取已經(jīng)產(chǎn)生的對(duì)象.

如果考慮在多線程時(shí)候的情況,就需要進(jìn)行同步的處理了.

對(duì)簡(jiǎn)單的就是在獲取的方法上進(jìn)行同步,

public class SingleOne {

private static SingleOne instance;//全局變量

private SingleOne(){};//私有化

public static ?synchronized SingleOne getInstance(){

if(instance==null){//第一次訪問沒有,就new了一個(gè)出來了

instance=new SingleOne();

}

return instance;

}

}

這種寫法獲取的效率會(huì)比較差,每次只能有一個(gè)線程獲取對(duì)象.可以對(duì)他進(jìn)行一點(diǎn)改進(jìn)

//提高了效率,先判斷

class Single4{

private static Single4 instance;

private Single4(){}

public static Single4 getInstance(){

if(instance==null){//首先進(jìn)行判斷,是否已經(jīng)產(chǎn)生了對(duì)象,沒有進(jìn)行同步保護(hù)

synchronized (new Object()){

if(instance==null){

instance=new Single4();

}

}

}

return instance; //這里直接返回對(duì)象

}

}

先進(jìn)行判斷,第一次創(chuàng)建對(duì)象時(shí)候進(jìn)行同步保護(hù),以后就可以隨便獲取了.

這就是延遲記載,具體是否使用延遲加載,看具體的需求和環(huán)境,由你自己決定,不用聽信別人的"權(quán)威",畢竟沒有什么事是一樣的.

再就是惡漢式了,直接在加載類的時(shí)候就創(chuàng)建一個(gè)對(duì)象出來,放在那里,以后直接獲取就行了.

//直接new一個(gè)出來

class Single2{

private static final Single2 instance =new Single2(); // static ?final

private Single2(){} //私有化

public static ?Single2 ?getInstance(){

return instance;

}

}

使用final 和static 來進(jìn)行修飾.

寫到這里就差不多了,關(guān)于私有化構(gòu)造方法再多說一句,一些工具類,都是提供的static 方法,完全可以私有化構(gòu)造方法,讓他們直接沒有辦法創(chuàng)建對(duì)象,杜絕了使用對(duì)象調(diào)用

static方法的可能.

剛才是這篇博客快寫完了,然后電腦直接死機(jī)了,這是寫的第二遍,寶寶心里苦啊...就這樣子.

https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-18045781879.2.33c5236bZlPDUM&id=569353717228

深入理解Java虛擬機(jī)(jvm性能調(diào)優(yōu)+內(nèi)存模型+虛擬機(jī)原理)? ?很不錯(cuò)的虛擬機(jī)視頻教程.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腊徙,一起剝皮案震驚了整個(gè)濱河市双谆,隨后出現(xiàn)的幾起案子届榄,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吴汪,死亡現(xiàn)場(chǎng)離奇詭異激捏,居然都是意外死亡武花,警方通過查閱死者的電腦和手機(jī)沧竟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門铸敏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悟泵,你說我怎么就攤上這事杈笔。” “怎么了糕非?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵蒙具,是天一觀的道長。 經(jīng)常有香客問我朽肥,道長禁筏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任衡招,我火速辦了婚禮篱昔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘始腾。我一直安慰自己州刽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布浪箭。 她就那樣靜靜地躺著穗椅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奶栖。 梳的紋絲不亂的頭發(fā)上房待,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音驼抹,去河邊找鬼桑孩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛框冀,可吹牛的內(nèi)容都是我干的流椒。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼明也,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宣虾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起温数,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤绣硝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撑刺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹉胖,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甫菠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挠铲。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖寂诱,靈堂內(nèi)的尸體忽然破棺而出拂苹,到底是詐尸還是另有隱情,我是刑警寧澤痰洒,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布瓢棒,位于F島的核電站,受9級(jí)特大地震影響丘喻,放射性物質(zhì)發(fā)生泄漏脯宿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一仓犬、第九天 我趴在偏房一處隱蔽的房頂上張望嗅绰。 院中可真熱鬧舍肠,春花似錦搀继、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肌括,卻和暖如春点骑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谍夭。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工黑滴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人紧索。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓袁辈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親珠漂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晚缩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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