hjr-設計模式:單例模式

實現

使用單例,使用getInstance獲取對象實例而不用new創建新的實例

getInstance:做一個判斷,如果已經存在則直接獲取對象,不存在會new 一個對象

新建一個單例類,做判斷,如果該實例不存在則new 一個實例,如果存在則getInstance,然後return

分類

  1. 懶漢(用到了才new對象)
    private static Singleton instance ;

  2. 餓漢(先new好,用到了直接使用)
    private static Singleton instance = new Singleton();

  3. 線程安全(多線程環境不會繞過空判斷new多個)在null判斷處使用synchronized 保證

  4. 線程不安全(多線程環境可能繞過空判斷new多個)沒有鎖

上述有四種組合 懶安全 懶不安全 餓安全 餓不安全

  1. 雙重校驗鎖

private volatile static Singleton singleton;

做兩次實例null判斷

  1. 枚舉

public enum Singleton { INSTANCE; public void whateverMethod() { } }

  1. 靜態內部類

private static final Singleton INSTANCE = new Singleton();

業務

如sql連接實例,一個用戶維護一個連接,如果多次new 實例會造成一個用戶多個連接,此處可以用單例模式,保證只維護一個連接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章