用途 备忘录模式 (Memento) 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 这样以后就可将该对象恢复到原先保存的状态。 备忘录模式是一种行为型模式。...Memento,不能对备忘录的内容进行操作或检查。...o.SetMemento(c.GetMemento()); o.Show(); } } 运行结果 State = ON State = OFF State = ON 推荐 本文属于 JAVA...设计模式系列 。...参考资料 《大话设计模式》《HeadFirst设计模式》
在JAVA语言中,实现双重接口的办法就是将备忘录角色类设计成发起人角色类的内部成员类。 ...源代码 发起人角色源代码 package Memento2; import java.util.ArrayList; import java.util.List; public class Originator...package Memento2; import java.util.ArrayList; import java.util.List; public class Memento { private...; } public int getIndex() { return index; } } 负责人角色类 package Memento2; import java.util.ArrayList...; import java.util.List; public class Caretaker { private Originator o; private List<Memento
什么是备忘录模式?备忘录模式是一种行为设计模式,用于捕获对象的内部状态并在不破坏封装的前提下将其保存在外部,从而可以在需要时恢复对象到之前的状态。...备忘录模式的结构在Java中,备忘录模式包含以下几个关键组件:Originator(发起人):负责创建备忘录对象,并将其状态保存到备忘录对象中,或者从备忘录对象中恢复状态。...备忘录模式的实现步骤在Java中,实现备忘录模式通常包括以下步骤:定义备忘录类(Memento):创建一个备忘录类,用于存储发起人对象的内部状态。...总结备忘录模式是一种非常有用的设计模式,可以帮助我们实现对象状态的保存和恢复,从而实现撤销和恢复功能,增强了系统的灵活性和可维护性。...在Java中,备忘录模式被广泛应用于各种场景中,如文本编辑器、游戏系统、数据版本管理等。合理地应用备忘录模式可以使得系统设计更加清晰和易于扩展,从而提高代码的质量和效率。
游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力 下降,从备忘录对象恢复到大战前的状态 基本介绍 备忘录模式(Memento...这样以后就可将该对象恢复到原先保存的状态 可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情, 以防忘记了。...而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作 备忘录模式属于行为型模式 originator...: 对象(需要保存状态的对象) Memento : 备忘录对象,负责保存好记录,即Originator内部状态 Caretaker: 守护者对象,负责保存多个备忘录对象,使用集合管理,提高效率...数据库的事务管理 为了节约内存,备忘录模式可以和原型模式配合使用
下面基于备忘录设计模式来描述该场景流程。 2、场景图解 ?...备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。 2、模式图解 ?...3、核心角色 备忘录角色 负责保存对象状态的记录,即Originator内部状态。 发起人角色 创建一个含有当前的内部状态的备忘录对象,用来保存状态。...守护者对象 提供合理的方式,负责保存多个备忘录对象。...如果类的成员变量过多,会占用比较大的内存资源,为了节约内存,备忘录模式可以和原型模式配合使用。
前言 这次要介绍的是备忘录模式,也是行为模式的一种 。现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了。那么备忘录模式又是什么样子的呢?...是不是和手机上的备忘录一样呢?下面来介绍一下。 备忘录模式 概念介绍 备忘录模式是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。...备忘录模式的构成角色如下所示。 原发器类(Originator):创建一个备忘录对象,使用备忘录存储它的内部状态。 负责人类(CareTaker):负责保存好备忘录对象,不能检查或操作备忘录的内容。...2、备忘录实现了对信息的封装,一个备忘录对象是一种原发器对象状态的表示,不会被其他代码所改动。备忘录保存了原发器的状态,采用列表、堆栈等集合来存储备忘录对象可以实现多次撤销操作。...想了解更多的设计模式请查看Java设计模式学习记录-GoF设计模式概述。
而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。 3)备忘录模式属于行为型模式。...public String getState() { return state; } } package com.example.demo.memento.theory; import java.util.ArrayList...; import java.util.List; public class Caretaker { /** * 在list 集合中会有很多的备忘录对象 */ private List<...public void setDef(int def) { this.def = def; } } package com.example.demo.memento.game; import java.util.List...; import java.util.Map; import javax.activation.MailcapCommandMap; /** * 守护者对象,保存游戏角色的状态 * @author
备忘录模式 备忘录模式,又称快照模式或 Token 模式。 备忘录模式的定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。...Caretaker 备忘录管理员角色: 该角色对备忘录角色进行管理、保存和提供备忘录。 备忘录模式的简单示例 ?...public class Caretaker { // 备忘录角色 private Memento memento; // 提供备忘录 public Memento...) { this.memento = _memento; } } 备忘录模式使用场景和注意事项 备忘录模式的使用场景 需要保护和恢复数据的相关场景 提供一个可回滚的操作 需要监控副本场景中...数据库连接的事物管理 备忘录模式的注意事项 备忘录创建出来就要在最近的代码中使用,要主动管理他的生命周期,建立就要使用,不使用就要立即删除引用 备忘录的性能,不要在频繁建立备份的场景中使用备忘录模式
三、参与者 Memento 备忘录存储原发器对象的内部状态。 Originator 原发器创建一个备忘录,用以记录当前时刻它的内部状态。使用备忘录恢复内部状态. Caretaker 负责保存好备忘录。...不能对备忘录的内容进行操作或检查。 四、类图 ?
备忘录模式是什么? 备忘录模式(Memento Pattern),属于行为模式,定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便恢复到原先保存的状态。...Caretaker(备忘录管理员角色):负责管理备忘录,只负责将备忘录内容进行传递; 备忘录模式可以干嘛?...备忘录将当前的对象,通过一个存储容器,将该对象或对象的一些内部状态信息,存储一份,然后通过该备份,当原对象需要恢复的时候通过备忘录管理员角色,对原有的备忘录数据进行恢复。...优点: 遵循迪米特法则:由于角色的备份信息由备忘录管理员角色,只负责管理,而不能直接去修改备忘录的信息,并且该备忘录最终操作也由发起人来决定是否恢复。...备忘录模式类图 ?
备忘录模式 备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。...发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。 2.缺点 资源消耗大。...3.代码示例 3.1 备忘录实体类 public class Memento { private String state; public Memento(String state)...this.state=state; } //获取装填 public String getState() { return state; } //创建备忘录...public Memento createMemento() { return new Memento(state); } //设置备忘录 public
备忘录设计模式是一个行为设计模式,它能够在不破坏对象的封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。...基本概念 备忘录模式由三部分组成: Originator(发起人):创建一个备忘录并存储其当前的内部状态;还可以使用备忘录来恢复其内部状态。...使用场景 备忘录设计模式主要在以下情景中使用: 当你需要保存和加载对象的时刻快照,同时避免暴露对象的实现细节。 当直接访问对象会破坏封装性,并且引导其他冗余问题或限制时。...originator.GetStateFromMemento(careTaker.Get(1)); Console.WriteLine("Second saved State: " + originator.GetState()); 结论 备忘录模式是一种非常有用的设计模式...然而,如果需要频繁地保存大量数据,这可能会占用大量的内存,所以在使用备忘录模式时需要谨慎考虑。
定义 备忘录模式(Memento Pattern):是一种行为型设计模式,它定义了一个对象的内部状态,这个对象将状态保存下来,以便稍后恢复。...备忘录模式的关键点如下: 定义一个接口,用于定义备忘录对象的操作。 在接口中声明一个方法,用于创建一个备忘录对象。 在接口中声明一个方法,用于将备忘录对象的状态进行修改。...定义一个静态变量,用于存储备忘录对象的实例。 创建备忘录对象时,将一个指向对象的引用赋值给静态变量。 调用接口中的方法创建备忘录对象时,将对象的引用传递给静态变量。...,并将当前状态保存到备忘录对象中。...createMemento()方法创建备忘录对象,并将当前状态保存到备忘录对象中。restore()方法用于从备忘录对象中恢复先前的状态。 Memento类表示备忘录对象,它包含需要保存的状态。
存储这些快照的备忘录对象叫做此对象的历史;某个快照所处的位置叫做检查点。 备忘录角色(Memento) 备忘录角色由如下责任: 1. 将发起人(Originator)对象的内部状态存储起来。...备忘录可以根据发起人对象的判断来决定存储多少发起人对象的内部状态。 2.备忘录可以保护器内容不被发起人(Originator)对象之外的任何对象所读取。...备忘录有两个等效的接口: 窄接口:负责人(Caretaker)对象(和其他除发起人之外的任何对象)看到的是备忘录的窄接口(narrow interface),这个窄接口只允许它把备忘录对象传给其他的对象...发起人角色(Originator) 发起人角色有如下责任: 创建一个含有当前的内部状态的备忘录对象 使用备忘录对象存储其内部状态。...负责人角色(Caretaker) 负责人角色有如下责任: 负责保存备忘录对象 不检查备忘录对象的内容 备忘录模式的白箱实现 ? 源代码清单:
意义 备忘录模式 有点类似后悔药的功能,软件回档和撤回的功能就是备忘录的体现。...CCaretaker: 备忘录管理类。内部持有备忘录表,负责备忘录表的管理,实现备份和回退功能。...在设计阶段要杜绝这种可能。...因此我们可以设计一个阈值机制,当达到阈值,抛弃备忘录最原始的版本。这么一看备忘录设计成栈结构比较合适,先进后出。 备忘录模式的实现相对简单,也不唯一,在满足备忘录模式思想的情况下,实现方式合理即可。...另外,这么多的设计模式,不要纠结于该使用哪种,结合具体场景可选择一个或多个设计模式都是可行的。多数情况下,存在多种设计模式相互配合完成某种组件或场景的实现。
这就是备忘录模式。利用某种数据结构保存之前的状态。
备忘录模式是使用一个备忘录对象把另外一个对象内部状态进行保存,在适当的时候还原到某个状态。如同我们记录某件事件,在需要回忆的时候去看下记事本。 先来看下类图 ?...该模式涉及到3个角色: 发起人角色:Originator,该角色包含备忘录对象,备忘录对象存储了他的状态; 负责人角色:Caretaker,该角色保存备忘录对象,但不检查备忘录对象内容; 备忘录角色:Memento...,将发起人对象的状态保存起来,,保护发起人的内容不被外界访问 宽接口与白箱 备忘录角色对如何其他对象提供一个接口,也就是宽接口的话,那么备忘录角色存储的内部状态都暴露给其他对象。...,对备忘录对象里面的内容不再变化。...o.setState("End"); //回到初始 o.restoreMemento(c.retrieveMemento()); } }/** 最后结论和之前的一样,但在设计上面已经很不同
---- 角色 Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器,需要被数据备份的对象...备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,除了原发器本身与负责人类之外,备忘录对象不能直接供其他类使用,原发器的设计在不同的编程语言中实现机制会有所不同。...备份的数据会有多份,因此需要有一个类来管理这些备份 备忘录模式的核心是备忘录类以及用于管理备忘录的负责人类的设计。...悔棋可能回到上一步,也有可能回到上上次的状态…因此需要记录多次的状态 在设计备忘录类时需要考虑其封装性,除了Originator类,不允许其他类来调用备忘录类Memento的构造函数与相关方法,...备忘录实现了对信息的封装,一个备忘录对象是一种原发器对象状态的表示,不会被其他代码所改动。备忘录保存了原发器的状态,采用列表、堆栈等集合来存储备忘录对象可以实现多次撤销操作。
---- 问题引进 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 传统方案解决游戏角色恢复...备忘录模式基本介绍 基本介绍 1) 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。...这样以后就可将该对象恢复到原先保存的状态 2) 可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。...而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作 3) 备忘录模式属于行为型模式 备忘录模式的原理类图...数据库的事务管理 5) 为了节约内存,备忘录模式可以和原型模式配合使用
备忘录模式(Memento Pattern)是一种行为设计模式,其目的是在不破坏对象封装性的前提下,捕获并外部保存对象的状态,并在日后将该对象状态恢复到之前的某个状态。...备忘录模式包括三个角色: Originator:原发器,创建需要存储的备忘录对象,以保存对象的状态。 Memento:备忘录,保存原发器状态的对象。 Caretaker:管理者,负责保存和恢复备忘录。...在没有访问备忘录内部状态的前提下负责保护备忘录。 以下是一个使用C#编写的备忘录模式的经典代码实例。实例中,我们使用备忘录模式记录一个数字的历史状态,并支持撤销到之前的某个状态。..._value = value; } public int GetValue() { return _value; } } // 原发器类,用于创建备忘录和恢复备忘录...History类则表示备忘录的管理者,包含一个Stack用于保存备忘录对象。通过这个例子,我们可以看到如何使用备忘录模式来记录对象的历史状态,并支持恢复到之前的某个状态。
领取专属 10元无门槛券
手把手带您无忧上云