單例模式
今天新學了一種設計模式,叫做單例模式,具體是干啥用的,那些地方能用到他,其實我也不知道。好了,話不多說,直接上干貨!
單例模式,顧名思義,單個實例對象的模式。單例模式一共分為六種寫法,接下來一一為大家介紹。
第一個上場的小伙伴是我們的惡漢單例。惡漢,意思可能就是非常饑餓吧,所以在一開始就創建了一個實例對象來喂飽他。
關鍵點:()
1)私有構造函數
2)靜態私有成員--在類加載時已初始化
3)公開訪問點getInstance-----不需要同步,因為在類加載時已經初始化完畢,也不需要判斷null,直接返回
優缺點:因為在類加載時就創建了實例,所以加載速度慢,但是獲取對象速度快。
代碼如下:

接下來是懶漢單例。懶漢單例,特別懶,你用他他才創建實例對象。
類加載速度較快,但是獲取實例對象速度較慢。代碼如下:

關鍵點:
1)構造函數定義為私有----不能在別的類中來獲取該類的對象,只能在類自身中得到自己的對象
2)成員變量為static的,沒有初始化----類加載快,但訪問類的唯一實例慢,static保證在自身類中獲取自身對象
3)公開訪問點getInstance: public和synchronized的-----public保證對外公開,同步保證多線程時的正確性(因為類變量不是在加載時初始化的)
靜態內部類單例,代碼如下:

靜態內部類的優點是:外部類加載時并不需要立即加載內部類,內部類不被加載則不去初始化j,故而不占內存。即當Jingtai第一次被加載時,并不需要去加載Nb,只有當getInstance()方法第一次被調用時,才會去初始化j,第一次調用getInstance()方法會導致虛擬機加載Nb類,這種方法不僅能確保線程安全,也能保證單例的唯一性,同時也延遲了單例的實例化。
枚舉單例:超級簡單,但是到底是在怎么用的啊啊啊啊啊啊啊啊啊啊?????

懶漢的加鎖模式

謝謝大家歡迎指正錯誤地方!!!!!!!!!!!!!!-------------------------------------------------------
浙公網安備 33010602011771號