枚举实现单利模式代码
为什么不使用常规的模式实现单利
常用方式:饿汉式、懒汉式、静态内部类、双重校验锁
以上方式都存在缺陷:
1.利用反射的方式来实例化多个不同的实例
2.在序列化和反序列换的时候也会出现多个不同的实例
使用枚举实现单利的原因
单利模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
枚举:
代码简单
枚举默认就是单利且线程安全
枚举单例可以自己处理序列化
使用枚举实现单利的好处:
Joshua Bloch大神《Effective Java》中有提到,因为其
1.功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,
2.单元素的枚举类型被作者认为是实现Singleton的最佳方法。
实现
//使用枚举实现SingleEnum类的单利
public enum SingleEnum(){
//枚举的实例化对象,枚举中每个实例化对象都等价与static final修饰
//表明也只能被实例化一次
INSTANCE;
//枚举中构造方法默认---私有化,可以默认不写
//保证调用枚举(SingleEnum)的实例对象(INSTANCE)才会调用
SingleEnum(){
system.out.println("我只会被调用一次");
}
//public void xxx方法()
//public void xxx方法()
}
//获取Single的实例对象
SingleEnum.INSTANCE;
//运行结果
我只会被调用一次
**对你没看错,写完了!!!,上面的Singleton不会被反射获取多个实例,不用考虑序列化问题.**其实更加简化,去掉杂七杂八的.
public enum SingleEnum(){
INSTANCE;
}
//获取Single的实例对象
SingleEnum.INSTANCE;