老年人隨手記/第一卷/設計模式:單例模式

剛入坑java時,身邊的前輩都推薦學習一下設計模式,其中單例模式常常被拿來當做案例。

最近在對別人代碼進行優化時,發現有些地方使用單例更加優雅,故而之時習之。

 

  1. 第一眼印象

單例模式,從字面上理解,“單例”是指只存在一個實例。因此,拍腦袋想出一個方案:

單例模式代碼1:

public class Singleton {

private static Singleton singleton;

private Singleton() {}

public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

 

  1. 大家推薦

       從多線程角度來看,此方式線程不安全,所以我們稍微改善一下:

單例模式代碼2:

public class Singleton {

private static volatile Singleton singleton;

private Singleton() {}

public static Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }

        return singleton;
    }
}

 

這種方式是大家推薦使用的雙重檢查方式,當然還有其他方式

  1. 老年人學習

最近發現也人推薦通過枚舉的方式實現單例

單例模式代碼3:

public enum Singleton {
    INSTANCE;

    // 初始化示例

    private Singleton(){}

    public void initSingleton() {}
}

 

 

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