首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memento pattern -在memento (JAVA)中恢复复杂对象

memento pattern -在memento (JAVA)中恢复复杂对象
EN

Stack Overflow用户
提问于 2013-11-19 01:07:29
回答 2查看 1.2K关注 0票数 3

感谢您阅读此问题。请帮我解决这个复杂的问题。

情况是这样的:

Oringator持有一个对象来执行某些方法。

Memento需要备份oringator.How中的复杂对象状态吗?

示例代码:

http://pastebin.com/4rV2aw3B

问题是,java是通过值传递的,而不是通过引用传递的。但对于对象传递来说,这有点棘手。如果我将一个对象传入该方法,尽管该方法保存了一个新的对象内存地址,但内存地址仍然指向传入的同一对象。请参阅此示例:http://www.javaworld.com/javaqa/2000-05/03-qa-0526-pass.html

如果我创建memento并将对象传递给新的memento对象,memento对象仍然保留原始的复杂对象(需要备份)。

那么,如何创建memento模式来备份处于命令模式中的复杂对象呢?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-11-19 01:21:41

Memento pattern需要在oringator.How中备份复杂的对象状态?

我假设其意图是Memento应该持有differentObj状态的副本...

没有神奇的解决方案。相反,这取决于什么是differentObj

  • 如果它是不可变的,则根本不需要复制它。
  • 如果它有一个复制构造函数或克隆方法,您可以使用它,模为该构造函数/方法具有所需的复制语义。
  • 如果它实现了SerializableExternalizable,那么您可以使用Java对象序列化,并使用序列化的对象来表示保存的状态,

<代码>H113您可以编写一个自定义序列化程序,或者使用Java到JSON或XML绑定。<代码>H214<代码>F215

请注意,(假设的)引用调用不一定能解决问题。您还需要某种形式的复制构造函数(或类似的)来允许进行复制...并且您将依赖于具有正确语义的构造函数。

票数 6
EN

Stack Overflow用户

发布于 2013-11-19 01:24:36

你有没有试过克隆Memento对象?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20053570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档