`

Memento(备忘录)---对象行为型模式

阅读更多

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

一个备忘录(memento)是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器。当需要设置原发器的检查点时,取消操作机制会向原发器请求一个备忘录。原发器用描述当前状态的信息初始化该备忘录。只有原发器可以向备忘录中存取信息,备忘录对其他的对象“不可见”。

 

必须保存一个对象在某一个时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态。

如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

备忘录存储原发器对象的内部状态。防止原发器以外的其他对象访问备忘录。理想的情况是指允许生成本备忘录的那个原发器访问本备忘录的内部状态。

 

管理器向原发器请求一个备忘录,保留一段时间后,将其送回给原发器。有时管理者不会将备忘录返回给原发器,因为原发器可能根本不需要退到先前的状态。备忘录是被动的。只有创建备忘录的原发器会对它的状态进行赋值和检索。

 

备忘录模式有以下一些效果:

1、保持封装边界。使用备忘录可以避免暴露一些只应有原发器管理却又必须存储在原发器之外的信息。该模式把可能很复杂的原发器内部信息对其他对象屏蔽起来,从而保持了封装边界。

2、它简化了原发器。在其他的保持封装性的设计中,原发器负责保持客户请求过的内部状态版本。这就把所有存储管理的重任交给了原发器。让客户管理它们请求的状态将会简化原发器,并且使得客户工作结束时无需通知原发器。

3、使用备忘录可能代价很高。如果原发器在生成备忘录时必须拷贝并存储大量的信息,或者客户非常频繁地创建备忘录和恢复原发器状态,可能会导致非常大的开销。除非封装和恢复原发器状态的开销不大,否则该模式可能并不适合。

4、管理器负责删除它所维护的备忘录。然而,管理器不知道备忘录中有多少个状态。因此当存储备忘录时,一个本来很小的管理器,可能会产生大量的存储开销。

 

备忘录有两个接口,一个为原发器所使用的宽接口,一个为其他对象所使用的窄接口。

如果备忘录的创建及其返回(给他们的原发器)的顺序是可预测的,备忘录可以仅存储原发器内部状态的增量改变。

一个包含可撤销的命令的历史列表可使用备忘录以保证当命令被取消时,它们可以被恢复到正确的状态。历史列表定义了一个特定的顺序,按照这个顺序命令可以被取消和重做。这意味着备忘录可以只存储一个命令所产生的增量改变而不是它所影响的每一个对象的完整状态。

 

Command模式:命令模式可使用备忘录来为可撤销的操作维护状态。

Iterator模式:备忘录可用于迭代。

 

分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    它只是一个容器,持有备忘录对象的引用,通常通过一个列表或队列来管理多个备忘录,以支持多步撤销/重做操作。 在C#中,使用备忘录模式的一个示例可能是创建一个文本编辑器。原发器可以是编辑器的文本模型,备忘录...

    (行为型模式) Memento 备忘录模式

    C#面向对象设计模式 (行为型模式) Memento 备忘录模式 视频讲座下载

    设计模式之备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...

    设计模式专题之(十九)备忘录模式---设计模式备忘录模式示例代码(python--c++)

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。这种模式通常用于游戏存档、撤销/重做操作、以及...

    备忘录模式-极客学院-java-课件代码

    - **资源管理**:如果备忘录对象占用大量内存,管理者需要合理管理这些对象,比如使用弱引用、缓存策略或限制备忘录的数量。 - **多版本控制**:在一些复杂系统中,可能需要支持多个历史版本的回溯,这时可以考虑...

    设计模式之备忘录模式(Memento)

    备忘录模式(Memento Pattern)是设计模式中的一种行为模式,主要目的是在不违反封装原则的情况下,保存一个对象的内部状态,以便在需要时能够恢复到先前的状态。这种模式通常用于实现撤销/重做功能或者在游戏中保存...

    Java设计模式-备忘录

    2. **备忘录(Memento)**:备忘录对象存储发起人的状态。它持有发起人需要保存的所有信息,但不能对这些信息进行任何修改。在Java中,备忘录类可以使用private构造函数和getter/setter方法来防止外部对象对状态的...

    设计模式之备忘录(memento)

    标签“源码”和“工具”表明这个话题可能涉及实际代码实现和一些辅助工具的使用,例如使用备忘录模式来实现撤销/重做功能时,可能需要用到队列数据结构来管理备忘录对象。 在压缩包文件"Design"中,可能包含了与...

    c++设计模式-行为型模式-备忘录模式

    c++设计模式-行为型模式-备忘录模式;qt工程;c++简单源码;备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先...

    备忘录模式.rar备忘录模式.rarjava设计模式

    它创建并知道如何构造一个备忘录对象,同时它也负责在适当的时候使用备忘录恢复其状态。 2. **备忘录(Memento)**:存储发起人的内部状态。备忘录可以是简单的数据结构,如POJO,也可以是复杂的结构,例如序列化的...

    java常用设计模式-备忘录模式

    在使用备忘录模式时,我们可以根据实际情况创建原始对象、备忘录对象和负责管理备忘录对象的对象,然后使用createMemento()方法创建备忘录对象,并将当前状态保存到备忘录对象中。之后,我们可以使用restore()方法从...

    C++设计模式课件19_Memento_备忘录.pdf

    除了备忘录模式,C++设计模式还包括了其他23种设计模式,它们分别是单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式、命令...

    3 备忘录模式-课程内容.rar

    3. 客户端(Client):客户端使用备忘录对象来保存和恢复原始对象的状态,但不能访问备忘录对象的内部细节。 备忘录模式的关键在于,备忘录对象通常是私有的,只有原始对象可以创建和还原。这样可以避免其他部分的...

    设计模式_行为型_备忘录模式.md

    备忘录模式(Memento)是一种行为型设计模式,它允许在不暴露对象的实现细节的情况下,捕获并保存对象的内部状态,从而可以在未来某个时刻恢复到之前的状态。备忘录模式特别适用于实现撤销操作,或是需要进行状态...

    [行为型模式] 备忘录模式的理解

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复对象的状态。这种模式常用于需要记录对象当前状态以便稍后恢复的情况,例如撤销/重做功能、游戏存档或者复杂表单的数据保存。 在备忘录...

    设计模式之备忘录模式

    备忘录模式(Memento Pattern)是软件设计模式中的一种,属于行为模式。它提供了一种方式来恢复对象到之前的状态,即“撤销”操作。备忘录模式的核心思想是保存对象的内部状态,以便在需要时能恢复到这个状态,而...

    3 备忘录模式-MOOC课程内容.pdf

    然而,备忘录模式也有其缺点,主要是如果需要记录的状态信息过多,那么备忘录对象可能会占用大量的存储空间,从而增加系统的存储开销。因此,在实际应用中,设计备忘录的存储结构时应考虑到存储效率和可维护性,例如...

    备忘录模式实现及案例

    备忘录模式是一种设计模式,属于行为模式类型,它的主要作用是保存对象的状态,以便在需要的时候能够恢复到之前的状态。这种模式的核心在于提供一种方式,可以在不破坏封装的前提下,捕获并存储一个对象的内部状态,...

    备忘录模式 C++ 实现

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以有效地帮助开发者在程序运行过程中保存对象的状态,以便在需要时恢复到之前的状态,这...

Global site tag (gtag.js) - Google Analytics