感谢您阅读此问题。请帮我解决这个复杂的问题。
情况是这样的:
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模式来备份处于命令模式中的复杂对象呢?
谢谢。
发布于 2013-11-19 01:21:41
Memento pattern需要在oringator.How中备份复杂的对象状态?
我假设其意图是Memento应该持有differentObj状态的副本...
没有神奇的解决方案。相反,这取决于什么是differentObj。
Serializable或Externalizable,那么您可以使用Java对象序列化,并使用序列化的对象来表示保存的状态,<代码>H113您可以编写一个自定义序列化程序,或者使用Java到JSON或XML绑定。<代码>H214<代码>F215
请注意,(假设的)引用调用不一定能解决问题。您还需要某种形式的复制构造函数(或类似的)来允许进行复制...并且您将依赖于具有正确语义的构造函数。
发布于 2013-11-19 01:24:36
你有没有试过克隆Memento对象?
https://stackoverflow.com/questions/20053570
复制相似问题