枚举
作者:生
- 2023-10-30 上海
本文字数:759 字
阅读完需:约 2 分钟
枚举式单例
优点:1.线程安全;2.防止反射攻击;3.防止序列化和反序列化攻击;
缺点:1.不支持延迟加载;2.无法继承(可以实现接口);3.可读性较差;
适用场景:需要保证线程安全性、防止反射攻击和序列化攻击的场景,但不适用于需要延迟加载和扩展性较高的场景。
实现 1
public enum SimpleEnumStarvingSingleton {
INSTANCE;
private final String name;
private boolean loaded = false;
SimpleEnumStarvingSingleton() {
name = "SimpleEnumStarvingSingleton";
}
public static void main(String[] args) {
SimpleEnumStarvingSingleton simpleEnumStarvingSingleton = SimpleEnumStarvingSingleton.INSTANCE;
System.out.println(simpleEnumStarvingSingleton.name);
// simpleEnumStarvingSingleton.setLoaded(true);
if (!simpleEnumStarvingSingleton.isLoad()) return;
simpleEnumStarvingSingleton.doSomething();
}
public void setLoaded(boolean loaded) {
this.loaded = loaded;
}
public boolean isLoad() {
return this.loaded;
}
public void doSomething() {
System.out.println("do...........");
}
}
复制代码
实现 2
EnumStarvingSingleton 类是可以被反射的。
public class EnumStarvingSingleton {
private EnumStarvingSingleton() {
}
public static EnumStarvingSingleton getInstance() {
return ContainerHolder.HOLDER.instance;
}
private enum ContainerHolder {
HOLDER;
private EnumStarvingSingleton instance;
ContainerHolder() {
instance = new EnumStarvingSingleton();
}
}
}
复制代码
划线
评论
复制
发布于: 13 分钟前阅读数: 6
生
关注
还未添加个人签名 2019-08-17 加入
还未添加个人简介
评论