写点什么

枚举

作者:
  • 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(); } }}
复制代码


用户头像

关注

还未添加个人签名 2019-08-17 加入

还未添加个人简介

评论

发布
暂无评论
枚举_生_InfoQ写作社区