序列化一个成员都是短暂的类的重点是什么?

时间:2013-05-30 19:32:52

标签: design-patterns singleton

我正在阅读关于Singleton设计模式的一些内容,结果证明实现可序列化Singleton的一种好方法是使用readResolve方法返回true实例,并声明transient所有成员。我有几个问题:

  1. 如果在反序列化时你仍然得到真实实例而不是序列化实例,那么序列化是否无用?无论如何,你会失去一切。
  2. 如果我对上述情况有误,不会宣布所有成员暂时失去所有成员的价值观吗?那么,序列化不会无用吗?
  3. 如果所有成员数据都丢失,是否需要序列化Singleton?
  4. 感谢。

2 个答案:

答案 0 :(得分:0)

这一切都取决于你的单身人士。考虑这个例子:

public class Apple implements Serializable {
    private List<Worm> worms = Collections.emptyList();

    ...
}

Collections.emptyList()是一个单身人士。但是在序列化苹果时序列化它是有意义的。当反序列化苹果时,你想要取回单例空列表,而不是这个单例的新副本。

答案 1 :(得分:0)

重点不是序列化状态并将其反序列化。重点是,在序列化和反序列化过程中,您可能最终会创建一个您希望成为Singleton的类的多个实例。那么你如何阻止这种情况发生是你试图解决的问题的焦点。解决方案就像你提到的那样 -

readResolve方法,它返回true实例和所有成员  宣布暂时 *

所以,你没有保存和检索状态。但是,在序列化和反序列化过程中,你要阻止你的单元在一个实例中具有多个实例,这在单例的情况下更为重要。希望这有帮助。