java設計模式 單例模式

2021-06-22 07:57:10 字數 1446 閱讀 6297

這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單

一、獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件:皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這個場景中,有皇帝,有大臣,大臣是天天要上朝參見皇帝的,今天參拜的皇帝應該和昨天、前天的一樣(過渡期的不考慮,別找茬哦),大臣磕完頭,抬頭一看,嗨,還是昨天那個皇帝,單例模式,絕對的單例模式,先看類圖:

然後我們看程式實現,先定乙個皇帝:

package com.dashu.singleton;

/** * 一山不容二虎,皇帝只有乙個 ,emperor為單例類

* */

public class emperor

public static emperor getinstance()

return emperor;

} public void emperorinfo()

}

然後定義大臣:

package com.dashu.singleton;

/** * 大臣拜皇帝

* 每天的皇帝都只有乙個

* */

public class minister

}

執行結果:

這種設計風險:

假如現在有兩個執行緒a和執行緒b,執行緒a執行到 this.singletonpattern =new singletonpattern(),正在申請記憶體分配,可能需要 0.001 微秒,就在這 0.001 微秒之內,執行緒 b 執行到if(this.singletonpattern == null),你說這個時候這個判斷條件是true還是false?是true,那然後呢?執行緒b也往下走,於是乎就在記憶體中就有兩個singletonpattern的例項了,看看是不是出問題了?如果你這個單例是去拿乙個序列號或者建立乙個訊號資源的時候,會怎麼樣?業務邏輯混亂!資料一致性校驗失敗!最重要的是你從**上還看不出什麼問題,這才是最要命的!因為這種情況基本上你是重現不了的,不寒而慄吧,那怎麼修改?有很多種方案,我就說一種,能簡單的、徹底解決問題的方案:

public class singletonpattern 

public synchronized static singletonpattern getinstance()

}

直接 new 乙個物件傳遞給類的成員變數 singletonpattern,你要的時候 getinstance()直接返回給你,解決問題!

Java設計模式 單例模式

單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...

java設計模式 單例模式

單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...

Java 設計模式 單例模式

單例模式是一種物件建立模式,確保系統中乙個類只有乙個例項。單例模式如下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。採用這種設計模式有兩大好處 1.對於頻繁使用的物件,可以省略建立物件所花費的時間 2.由於new操作的次數減少,對...