java設(shè)計模式之單例模式實例講解

單例模式是應(yīng)用最廣的模式,在開發(fā)中,如果我們想要讓一個類在nvm中只有一個實例的話,就設(shè)計成單例模式,單例模式能夠減少資源的消耗,這對我們實際開發(fā)中很重要,所以我們要來學(xué)習(xí)一下這個模式。

單類模式的實現(xiàn)思路:

1.構(gòu)造私有,用private修飾

2.通過一個靜態(tài)方法返回這個對象

3.確保這個類的對象只有一個,尤其是在多線程下。

4.確保這個類在反序列化的時候不會被創(chuàng)建。

這就是實現(xiàn)思路,接下來我們看看具體的實現(xiàn)

第一種:餓漢式


這種實現(xiàn)直接new出該對象,不管我們需不需要,直接會有一個,保證這個類實例的唯一性,無論是否在多線程下,都是同一個對象。

第二種:懶漢式


這種可以看出,它并沒有直接給出這個類的實例對象,而是我們需要的時候在創(chuàng)建,但是有一個問題就是在多線程的情況下,是不安全的,所以添加了synchronized的,保證了它的安全,但是又出現(xiàn)新的問題,就是每次我調(diào)用getInstance()時都會進(jìn)行同步,造成一定的卡頓。

第三種:雙重鎖


這種事目前使用最多的單例實現(xiàn)的方式,雙重同步鎖,解決了懶漢式的問題。但是在有些書上說這種方式并不好,我也不是很懂,意思是有可能獲取不到這個對象,但是概率很小很小。。。

第四種 ?靜態(tài)類的方式


這種方式目前也是很多人用的方式,第一次加載該類時不會初始化sing,只有在調(diào)用getInstance()時才會加載Single類,這中方式不僅解決了線程問題,也保證了對象的唯一性。

以上就是單例模式的實現(xiàn)方式,大家可以根據(jù)自己的需求來選擇合適的方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容