package com.jensenlee.designPatterns;
public class Singleton {
}
// 懒汉模式
class LazySingleton {
private volatile static LazySingleton lazySingleton;
private LazySingleton() {
}
public LazySingleton getInstance() {
if (lazySingleton == null) {
synchronized (LazySingleton.class) {
if (lazySingleton == null) {
lazySingleton = new LazySingleton();
}
}
}
return lazySingleton;
}
// 1.延迟加载,只有在真正使用的时候才初始化。
// 2.通过加锁和双重检查进行优化
// 3.编译器(JIT),CPU有可能对指令进行重排序,导致使用了尚未初始化的实例,对于volatile修饰的字段,可以防止指令重排。
}
// 饿汉模式
class HungrySingleton {
private static HungrySingleton hungrySingleton = new HungrySingleton();
private HungrySingleton() {
}
public HungrySingleton getInstance() {
return hungrySingleton;
}
}
// 静态内部类模式
class InnerClassSingleton {
private static class InnerClassHolder {
private static InnerClassSingleton innerClassSingleton = new InnerClassSingleton();
}
private InnerClassSingleton() {
}
public InnerClassSingleton getInstance() {
return InnerClassHolder.innerClassSingleton;
}
}