单例模式学习总结:
实现单例的步骤:
1.私有化构造器 2.声明私有静态变量 3.提供静态实例
l实现单例的方式:
1饿汉模式
private EagerlySingleton() {}
private static final EagerlySingleton INSTANCE = new EagerlySingleton();
public static EagerlySingleton getInstance() {
return INSTANCE;
}
2.懒汉模式:
模式1:
private static ThreadSafeLazyLoaded instance;
private ThreadSafeLazyLoaded() {
if (instance==null) {
instance = this;
}else {
throw new IllegalStateException("已经实例化.");
}
}
public static synchronized ThreadSafeLazyLoaded getInstance() {
if (instance==null) {
instance = new ThreadSafeLazyLoaded();
}
return instance;
}
模式2:双重检查
private static DoubleCheckLazyLoaded instance;
private DoubleCheckLazyLoaded() {
if (instance!=null) {
throw new IllegalStateException("Already initialized.");
}
}
public static DoubleCheckLazyLoaded getInstance() {
DoubleCheckLazyLoaded result = instance;
if (result==null) {
synchronized (DoubleCheckLazyLoaded.class) {
result = instance;
if(result==null) {
instance = result = new DoubleCheckLazyLoaded();
}
}
}
return result;
}
模式3:内部类实现:
public final class AnonymousInnerSingleton {
private AnonymousInnerSingleton() {}
public static AnonymousInnerSingleton getInstance() {
return AnonymousInner.INSTANCE;
}
private static class AnonymousInner {
private static final AnonymousInnerSingleton INSTANCE = new AnonymousInnerSingleton();
}
}
模式4:枚举:
public enum EnumSingleton {
INSTANCE;
@Override
public String toString() {
return getDeclaringClass().getCanonicalName() + "@" + hashCode();
}
}
除枚举外可以通过反射进行破坏