要實現一個單例類,須要通過三個步驟:html
一、私有化構造函數,目的是避免其它類能夠建立這個類的對象;設計模式
二、在本類中建立惟一實例對象(由於構造函數私有化了,因此單例類的惟一實例對象只能在單例類裏面建立;),使用一個私有靜態的成員變量保存安全
三、對外提供一個公開的靜態的函數供別人獲取這個惟一實例對象多線程
餓漢式寫法:函數
特色:在類加載的時候就會建立對象;線程
好處:類,只會加載一次,因此這種寫法能夠保證對象的惟一性;設計
弊端:由於類加載的時候就會建立對象,因此有的時候還不須要使用對象,就會建立對象,形成內存的浪費;3d
懶漢式寫法:cdn
特色:懶漢式再類加載的時候不建立對象,只有第一次調用獲取函數時才建立對象;視頻
好處:就能夠避免出現內存浪費的問題;
弊端:再多線程環境下不能保證對象的惟一性;
懶漢式執行過程圖解:
設計模式:針對某一類問題的通用的解決辦法;
單例設計模式:解決程序運行中一個類最多隻能有一個實例對象的問題;
單例實現的步驟:
一、私有構造函數,避免其餘類能夠直接建立單例類的對象;
二、在本類中建立惟一實例,使用靜態成員變量保存;爲保證安全性,私有化這個成員變量;
三、對外提供一個公開的靜態方法,供其餘類獲取本類的惟一實例;
單例的兩種實現方法:
餓漢式:在加載類的同時就建立了這個類的惟一實例;
好處:可保證這個類的實例的惟一性;
弊端:若是隻是使用這個類,可是暫時不須要它的對象,也會建立惟一實例,形成內存的浪費;
懶漢式:在第一次調用獲取實例的方法時才建立對象;
好處:第一次調用獲取實例的方法時才建立對象,能夠避免內存的浪費;
弊端:多線程環境下不能保證明例的惟一性;