前两天作者写了一篇关于单例模式的文章,其中枚举写法没有写全,今天单独写一写使用枚举如何去写单例。枚举这种写法可以防止反射、序列化造成多例的情况。开始
/**
* 枚举enum和静态代码块的特性相似,在使用枚举类时,构造方法会被自动调用,程序中调用两次枚举,构造方法调用一次
* Resource r1 = EnumSingleton.INSTANCE.getInstance();
* Resource r2 = EnumSingleton.INSTANCE.getInstance();
* System.out.println(r1 == r2);
* construct enum singleton
* true
* 因为枚举变量是static final的,所以如果不是定义时声明,那只能在构造方法中实例化,并且有且只能实例化一次。所以保证了resource对象的单例性。
* 反编译后就会发现,使用枚举其实和使用静态类内部加载方法原理类似。枚举会被编译成如下形式:
* public final class T extends Enum{
* ...
* }
* 代码简单
* 自由序列化
* 线程安全
* @author YF
*
*/枚举
对象
运行结果
最后
留言与评论(共有 0 条评论) |