單例模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。單例模式的特徵如下:
1、單例類只能有一個實例。
2、單例類必須自己創建自己的唯一實例。
3、單例類必須給所有其他對象提供這一實例。
這三個特徵可以保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
爲了實現上述的三個特徵,單例模式類的定義方法:單例類的構造函數以及單例類對象必須私有化,只能從類中才能獲取單例類的唯一對象。
單例類的實現方式有6種:
懶漢式、線程不安全,懶漢式、線程安全,餓漢式,雙檢鎖,登記式/靜態內部類,枚舉等等
1、懶漢式、線程安全:必須加鎖才能實現單例模式,效率比較低,代碼實現如下:
2、餓漢式:線程安全的,沒有加鎖,執行效率會提高,代碼實現如下:
以上兩種實現方式的運行結果,支持多線程: