序言:在寫單例模式以前,我知道網上有一堆博客已經寫過單例模式了,之因此再寫,只是單純想作一個記錄,我的認爲單例模式是最爲基礎且最簡單的設計模式之一,否則面試怎麼逢人就問,可是單例模式,據我所瞭解能用的應該有4種常規寫法(非線程安全的能夠理解爲沒辦法在真實生產環境運用)。java
單例模式是建立型設計模式的一種,意圖保證一個類只有一個實例,並提供一個訪問它的全局訪問點面試
優勢:數據庫
場景:設計模式
//最爲推薦的懶漢式寫法 class Singleton { private static volatile Singleton instance; private Singleton(){} //提取一個靜態的公有辦法,加入雙重檢查機制,解決線程安全問題,同時解決懶加載問題 public static Singleton getInstance(){ if(instance == null){ synchronized (Singleton.class) { if(instance == null){ instance = new Singleton(); } } } return instance; } }
// 餓漢式(靜態變量) class Singleton { //本類內部建立對象實例 private static final Singleton _INSTANCE = new Singleton(); // 構造器私有化 private Singleton() {} //提供一個公有的靜態方法 public static Singleton getInstance(){ return _INSTANCE; } }
//內部類實現單例模式,線程安全,懶加載 class Singleton{ //構造器私有化 private Singleton(){} //寫一個靜態內部類,該類中有一個靜態屬性 Singleton private static class SingletonInstance { private static final Singleton INSTANCE = new Singleton(); } //提供一個靜態的公有辦法,直接返回Singleton.instance public static synchronized Singleton getInstance(){ return SingletonInstance.INSTANCE; } }
//枚舉 自然單例 enum Singleton{ INSTANCE; }
總結: 我的認爲枚舉最爲簡單,畢竟自然單例,其餘寫法看本身所須要的場景吧安全