剛入坑java時,身邊的前輩都推薦學習一下設計模式,其中單例模式常常被拿來當做案例。
最近在對別人代碼進行優化時,發現有些地方使用單例更加優雅,故而之時習之。
- 第一眼印象
單例模式,從字面上理解,“單例”是指只存在一個實例。因此,拍腦袋想出一個方案:
單例模式代碼1:
public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
- 大家推薦
從多線程角度來看,此方式線程不安全,所以我們稍微改善一下:
單例模式代碼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;
}
}
這種方式是大家推薦使用的雙重檢查方式,當然還有其他方式
- 老年人學習
最近發現也人推薦通過枚舉的方式實現單例
單例模式代碼3:
public enum Singleton {
INSTANCE;
// 初始化示例
private Singleton(){}
public void initSingleton() {}
}