唉,谷歌让我失望了......
什么是序列化代理模式?在哪里可以了解有关实现和使用它的更多信息?
在Josh Bloch的Effective Java,Second Edition 的最后一节中有一个很好的描述.
假设您有一个A
您想要序列化的类.您首先声明它要实现Serializable
.然后使用序列化方法writeReplace()
返回一个所谓的"序列化代理",它将被序列化以代替实例A
.该writeReplace()
方法不需要公开.A
永远不会调用默认序列化,因此A
可以维护所有API属性.
通常,代理实现为私有静态嵌套类,它本身必须实现Serializable
(或Externalizable
完全控制读/写过程).因为代理是私有的,所以它的实现细节(例如具有无参数构造函数和可变性)将被隐藏.
代理存储足够的原始对象的状态以便它可以在反序列化时重新构建对象.在反序列化时,代理使用该方法readResolve()
返回实例A
.对于单身人士来说,这可以是单身实例本身.
我写了一个详细的博客文章,其中包含使用序列化代理序列化Serializing Immutables和Singletons的示例.