我正在阅读关于Singleton设计模式的一些内容,结果证明实现可序列化Singleton的一种好方法是使用readResolve
方法返回true实例,并声明transient
所有成员。我有几个问题:
感谢。
答案 0 :(得分:0)
这一切都取决于你的单身人士。考虑这个例子:
public class Apple implements Serializable {
private List<Worm> worms = Collections.emptyList();
...
}
Collections.emptyList()
是一个单身人士。但是在序列化苹果时序列化它是有意义的。当反序列化苹果时,你想要取回单例空列表,而不是这个单例的新副本。
答案 1 :(得分:0)
重点不是序列化状态并将其反序列化。重点是,在序列化和反序列化过程中,您可能最终会创建一个您希望成为Singleton的类的多个实例。那么你如何阻止这种情况发生是你试图解决的问题的焦点。解决方案就像你提到的那样 -
readResolve方法,它返回true实例和所有成员 宣布暂时 *
所以,你没有保存和检索状态。但是,在序列化和反序列化过程中,你要阻止你的单元在一个实例中具有多个实例,这在单例的情况下更为重要。希望这有帮助。