刚入坑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() {}
}