创建者模式 —— 单例设计
单例设计模式
结构
实现
饿汉式需要加 final 关键字吗?
声明final的变量,必须在类加载完成时已经赋值,如果你是final非static成员,必须在构造器、代码块、或者直接定义赋值;如果是fainal static 成员变量,必须直接赋值或者在静态代码块中赋值。 在单例模式中,如果存在释放资源的情况下,就不能加final修饰了。
public void releaseInstance(){
if(instance != null){
instance = null;
}
}
释放资源之后,如果需要重新使用这个单例,就必须存在重新初始化的过程,所以不能加final,对于不需要释放资源的情况,可以加final 总而言之,要不要加final修饰,可以根据情况而定
DCL 加 volatile
public class Singleton {
private volatile static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
静态内部类
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
枚举方式
public enum Singleton {
INSTANCE;
}
序列化、反序列化破坏单例
JDK 源码解析 —— Runtime 类
下一篇:
搬水果 (贪心算法实现)
