单例模式(防止反序列化恢复对象)

/**
 * 单例模式之防止利用反序列化恢复java对象
 *
 * @author Holley
 * @create 2018-07-05 9:49
 **/
public class Singleton implements Serializable{

    private static Singleton instance;
    private String name;
    private Singleton(String name){
        System.out.println("调用有参数的构造器");
        this.name = name;
    }
    public static Singleton getInstance(String name){
        // 只有当instance为空时才创建该对象
        if(instance == null){
            instance = new Singleton(name);
        }
        return instance;
    }
    /**
      * @Author holley
      * @Description 通过readResolve方法来使反序列化恢复的对象和用new关键字创建的对象是同一个
      * @Date 2018/7/5 10:03
      * @Param
      * @return
      */
    private Object readResolve()throws ObjectStreamException{
        return instance;
    }
}

当jvm反序列化恢复一个新对象时,系统会自动调用这个readResolve()方法返回指定好的对象,从而保证不会生成多个新的对象

猜你喜欢

转载自www.cnblogs.com/zhlblogs/p/9266824.html
今日推荐