Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 什么是序列化代理模式?_Design Patterns_Serialization - Fatal编程技术网

Design patterns 什么是序列化代理模式?

Design patterns 什么是序列化代理模式?,design-patterns,serialization,Design Patterns,Serialization,唉,谷歌让我失望了 什么是序列化代理模式?在哪里可以了解有关实现和使用它的更多信息 乔什·布洛赫(Josh Bloch)的《有效的Java,第二版》的最后一节有一个很好的描述 假设您有一个类a,希望使其可序列化。首先声明它实现可序列化。然后使用序列化方法writeReplace()。writeReplace()方法不需要是公共的。A上的默认序列化永远不会被调用,因此可以维护A的所有API属性 通常,代理被实现为一个私有静态嵌套类,该类本身必须实现Serializable(或Externaliza

唉,谷歌让我失望了


什么是序列化代理模式?在哪里可以了解有关实现和使用它的更多信息

乔什·布洛赫(Josh Bloch)的《有效的Java,第二版》的最后一节有一个很好的描述

假设您有一个类
a
,希望使其可序列化。首先声明它实现
可序列化
。然后使用序列化方法
writeReplace()。
writeReplace()
方法不需要是公共的。
A
上的默认序列化永远不会被调用,因此可以维护
A
的所有API属性

通常,代理被实现为一个私有静态嵌套类,该类本身必须实现
Serializable
(或
Externalizable
,以完全控制读/写过程)。因为代理是私有的,所以它的实现细节(例如没有参数构造函数和可变)将被隐藏

代理存储了足够的原始对象的状态以供写入,这样它就可以在反序列化时重新构造对象。在反序列化时,代理使用方法
readResolve()
返回
A
的实例。对于单例,这可以是单例实例本身


我用例子写了一篇详细的博客文章

我想知道序列化代理是否可以外部化。这本书只提到了可序列化。谢谢