package com.zxm;
import java.io.Serializable;
/**
* Creator:zxm
* Date:2017/2/23
* Description:
*/
public class Elvis implements Serializable{
public static final Elvis INSTANCE = new Elvis();
private Elvis(){
// ...
}
//防止享有特权的客户端借助AccessibleObject.setAccessible方法,通过反射机制调用私有构造器
public static Elvis getInstance(){
return INSTANCE;
}
//为了变成可序列化的,必须声明所有实例域都是瞬时的(transient),并提供一个readResolve方法
private Object readResolve(){
return INSTANCE;
}
}
public enum Elvis{
INSTANCE;
}
实用包含单个元素的枚举,无偿地提供了序列化机制,绝对防止多次实例化,即使是面对复杂的序列化或者反射攻击的时候。
单元素的枚举类型已经成为实现Singleton的最佳方法