JAVA枚举单例模式

来源:互联网 发布:网络搞笑猛虎下山图 编辑:程序博客网 时间:2024/05/14 15:04
关于单例模式的实现有很多种,网上也分析了如今实现单利模式最好用枚举,好处不外乎三点:
1.线程安全 
2.不会因为序列化而产生新实例 
3.防止反射攻击
关于第二点序列化问题,有一篇文章说枚举类自己实现了readResolve()方法,所以抗序列化,这个方法是当前类自己实现的(解决
关于第一点线程安全,从反编译后的类源码中可以看出也是通过类加载机制保证的,应该是这样吧(解决
关于第三点反射攻击,我有自己试着反射攻击了以下,不过报错了...看了下方的反编译类源码,明白了,因为单例类的修饰是abstract的,所以没法实例化。

举个枚举的例子:
public enum MaYun {//定义一个枚举的元素,就代表MaYun的一个实例himself;private String anotherField;MaYun(){//MaYun诞生要做的事情//这个方法也可以去掉。将构造时候需要做的事情放在instance赋值的时候/**himself() = MaYun(){ *MaYun诞生要做的事情 *}  */System.out.println("初始化");}public void splitAlipay(){System.out.println("Alipay是我的啦!");}}

在main函数里是这样调用的:
public class Main {public static void main(String[] args){MaYun.himself.splitAlipay();}}



1 0
原创粉丝点击