package com.itheima.pattern.singleton.demo7;
import java.io.Serializable;
public class Singleton implements Serializable{
// 私有构造方法
private Singleton(){}
//定义一个静态内部类
private static class SingletonHolder implements Serializable {
//在内部类中声明并初始化外部类的对象
private static final Singleton Instance = new Singleton();
}
//提供一个外部的公共访问方式
public static Singleton getInstance(){
return SingletonHolder.Instance;
}
//当进行反序列化时,会自动调用该方法,将该方法的返回值直接返回
//加上这个方法就不报错了
public Object readResolve(){
return SingletonHolder.Instance;
}
}
package com.itheima.pattern.singleton.demo7;
import java.io.*;
/**
* 测试使用反射破坏单例模式
*/
public class Client {
public static void main(String[] args) throws Exception {
// writeObject2File();
readObjectFromFile();
// readObjectFromFile();
}
//从文件读取数据(对象)
public static void readObjectFromFile() throws Exception{
//创建对象输入流对象
ObjectInputStream ois =new ObjectInputStream( new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.txt" ) );
//读取对象
Singleton instance = (Singleton) ois.readObject();
System.out.println(instance);
//释放资源
ois.close();
}
// 向文件中写数据(对象)
public static void writeObject2File() throws Exception {
//1.获取singleton对象
Singleton instance =Singleton.getInstance();
//2.创建对象输出流对象
ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream( "C:\\Users\\Administrator\\Desktop\\a.txt" ) );
//3.写对象
oos.writeObject( instance );
//4.释放资源
oos.close();
}
}