首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Memento模式与序列化的区别

Memento模式与序列化的区别
EN

Stack Overflow用户
提问于 2012-12-29 06:50:01
回答 4查看 4.1K关注 0票数 16

我正在做一些关于Memento模式的研究,我通常对行为模式是新手,随着我的研究,我已经变得相当困惑。我一直感到困惑的一个主要问题是Memento模式和序列化之间的区别。

据我所知,两者都可以用来存储对象,并在以后将它们带回来,但我还没有找到关于它们之间关键区别的明确答案,也许我在研究中遗漏了一些东西,但我想知道是否有人可以阐明这两者之间的区别。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-29 06:54:23

通常,Memento模式用于实现回滚/保存点支持。例如,我可能想要标记某个对象在某个时间点的状态,执行一些工作,然后决定将该对象恢复到标记该对象的位置。

Memento模式的实现可以使用序列化,这将涉及到将对象的内容保存到byte[]中,并保存在内存中或写入磁盘。当恢复时,将从序列化副本重建对象的内容。

相反,我可以通过在内存中克隆对象并保留对副本的引用,然后在需要恢复对象时复制回状态来实现Memento模式。此方法不使用序列化。

票数 16
EN

Stack Overflow用户

发布于 2012-12-29 06:55:31

Memento模式是一种OO设计模式,用于在内存中保留对象的先前状态。例如,实现一个“撤销”操作是很有用的。

例如,序列化是将对象图转换为字节数组的过程,以便将其保存在磁盘上,或通过网络将其发送到另一个JVM。他们没有太多的共同点。

票数 8
EN

Stack Overflow用户

发布于 2016-07-15 13:44:28

Memento是一种软件设计模式,它提供了将对象恢复到其先前状态(通过回滚撤消)的能力。

memento的结构

memento模式由三个对象实现:发起者、管理员和纪念品。

发起者是一些具有内部状态的对象。

管理员将对创建者执行某些操作,但希望能够撤消更改。管理员首先向发起人索要纪念品。然后,它执行它要执行的任何操作(或操作序列)。为了回滚到操作之前的状态,它将memento对象返回给发起者。

序列化用于持久化对象状态。这不是一种设计模式。有关序列化的更多详细信息,请参阅此SE问题。

Use of Serializable other than Writing& Reading object to/from File

Memento pattern可以使用序列化,也可以不使用序列化。如果memento对象没有离开JVM或者没有通过远程调用传递给其他服务,那么memento无需序列化就可以将对象状态存储在内存中。存储的对象可以在以后用来更改状态。

有关更多详细信息,请参阅sourcemaking文章。

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

https://stackoverflow.com/questions/14076772

复制
相关文章

相似问题

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