2.2.4 单例模式 : 突破序列化破坏单例
必要条件 //加上一个方法就行
private Object readResolve() {//反序列化的时候,会执行这个方法,保障反序列化的唯一
return singleton;
}
import java.io.Serializable;
public class Singleton implements Serializable {
private String value;
/**
* 必须是静态的,否则必须Client实例化才有
*/
private static Singleton singleton;
/**
* 构造方法,private -> Client无法创建实例
*/
private Singleton() {
}
/**
* 对外暴露的访问唯一实例的接口
* 只能是static的,因为Client无法创建实例
* 现在是懒加载模式 -> 先判断实例是否为null,为null才会新建
*
* @return
*/
public static Singleton getSingleton() {
if (null == singleton) {
singleton = new Singleton();
singleton.value = "这个是懒加载单例";
}
return singleton;
}
public String getValue() {
return value;
}
private Object readResolve() {//反序列化的时候,会执行这个方法,保障反序列化的唯一
return singleton;
}
}