單例模式是應(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ù)自己的需求來選擇合適的方式。