3.2.5 Singleton的序列化
如果单例类实现了Serializable接口,这时要特别注意,因为在默认情况下,每次反序列化(Desierialization)总会创建一个新的实例对象,这样一个系统会出现多个对象供使用。我们应该怎么办呢?
熟悉Java序列化的读者可能知道,我们需要在readResolve()方法里做文章,此方法在反序列化完成之前被执行,我们在此方法里替换掉反序列化出来的那个新的实例,让其指向内存中的那个单例对象即可,代码实现如下。
方法readResolve()直接返回singleton单例,这样,我们在内存中始终保持了一个唯一的单例对象。