gpt4 book ai didi

java - 纪念品模式 - 在纪念品中恢复复杂对象(JAVA)

转载 作者:行者123 更新时间:2023-12-03 23:00:25 25 4
gpt4 key购买 nike

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

情况是这样的:

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

Memento模式需要在oringator中备份复杂的对象状态,如何实现?

示例代码:

http://pastebin.com/4rV2aw3B

问题是,java确实按值传递,不按引用传递。但是对象传递有点棘手。如果我将一个对象传递给方法,虽然该方法持有对象的新内存地址,但内存地址仍然指向传入的同一个对象。看这个例子: http://www.javaworld.com/javaqa/2000-05/03-qa-0526-pass.html

如果我创建备忘录并将该对象传递给新的备忘录对象,备忘录对象仍然包含原始的复杂对象(需要备份)。

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

谢谢。

最佳答案

Memento pattern needs to backup the complex object state in oringator.How?

我假设意图是 Memento 应该保存 differentObj 状态的副本......

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

  • 如果它是不可变的,那么根本不需要复制它。

  • 如果它有复制构造函数或克隆方法,您可以使用它,模数构造函数/方法具有所需的复制语义。

  • 如果它实现了Serializable或者Externalizable,那么你可以使用Java Object Serialization,并使用序列化后的对象来表示保存的状态,

  • 您可以编写自定义序列化程序,或使用 Java 到 JSON 或 XML 绑定(bind)。


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

关于java - 纪念品模式 - 在纪念品中恢复复杂对象(JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com