首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式备忘录模式(Memento模式)引入备忘录模式备忘录模式的实例备忘录模式分析

引入备忘录模式 备忘录模式的实例 备忘录模式的分析 引入备忘录模式 我们在使用文本编辑器的时候,一般如果不小心误操作了,按ctrl+z就可以恢复之前的状态,撤销(undo)操作。...备忘录模式主要可以实现一下几个功能: undo撤销 redo重做 history 历史记录 snapshot快照 备忘录模式就像在某一个时刻给一个对象实例拍个照片,然后将以后有必要的时候,就可以将实例恢复到当时的状态...备忘录模式的实例 我们实现一个实例,可以保存实例某个时间点的状态,并且恢复。 ?...备忘录模式分析 备忘录模式的角色: Originator生成者 生成者会在保存自己状态的时候,new一个新的menmeto角色 当需要恢复的时候,只需要把以前的menmeto传给生成者,他就会将自己恢复至...备忘录模式的类图 ? image.png

40620

设计模式-备忘录模式

备忘录模式 备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。...该模式又叫快照模式。 1.优点 提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。 实现了内部状态的封装。...发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。 2.缺点 资源消耗大。...3.代码示例 3.1 备忘录实体类 public class Memento { private String state; public Memento(String state)...public Memento createMemento() { return new Memento(state); } //设置备忘录 public

42110
您找到你想要的搜索结果了吗?
是的
没有找到

设计模式-备忘录模式

美国大片好多超级英雄的角色,一个人从头干到尾,还毫发无损,真的是大家很崇拜的对象,而超级英雄平常也是普通人状态,等到世界末日或者说变身的时候才变成超级牛逼的一种状态,干完架又恢复成普通人,这里其实跟备忘录模式有点像...备忘录模式是什么? 备忘录模式(Memento Pattern),属于行为模式,定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便恢复到原先保存的状态。...Caretaker(备忘录管理员角色):负责管理备忘录,只负责将备忘录内容进行传递; 备忘录模式可以干嘛?...该模式主要用于恢复和保存对象的状态或对象。 优点: 遵循迪米特法则:由于角色的备份信息由备忘录管理员角色,只负责管理,而不能直接去修改备忘录的信息,并且该备忘录最终操作也由发起人来决定是否恢复。...备忘录模式类图 ?

37640

设计模式---备忘录模式

备忘录模式 引言 备忘录模式(Memento Pattern) 角色 为什么会出现守护者对象(负责人)?...备忘录模式实现框架 下棋案例 备忘录模式总结 优点 缺点 适用场景 注意细节 参考文章 引言 备忘录模式经常可以遇到,譬如下面这些场景: 浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后...备份的数据会有多份,因此需要有一个类来管理这些备份 备忘录模式的核心是备忘录类以及用于管理备忘录的负责人类的设计。...如果不考虑封装性,允许其他类调用setState()等方法,将导致在备忘录中保存的历史状态发生改变,通过撤销操作所恢复的状态就不再是真实的历史状态,备忘录模式也就失去了本身的意义。...4、数据库的事务管理 为了节约内存,备忘录模式可以和原型模式配合使用 ---- 参考文章 备忘录模式 ----

21810

设计模式-备忘录模式

备忘录模式是使用一个备忘录对象把另外一个对象内部状态进行保存,在适当的时候还原到某个状态。如同我们记录某件事件,在需要回忆的时候去看下记事本。 先来看下类图 ?...该模式涉及到3个角色: 发起人角色:Originator,该角色包含备忘录对象,备忘录对象存储了他的状态; 负责人角色:Caretaker,该角色保存备忘录对象,但不检查备忘录对象内容; 备忘录角色:Memento...系统中可能需要将某个对象的状态保存起来,在某个时候进行恢复,但这些状态并不希望被外界访问,以免有外界直接修改状态的危险,这个时候,备忘录模式就很好的解决这个问题,他利用宽接口和窄接口来保证。...public Narrow getConcrete(){ return (Narrow)new ConcreteCLass(); } } } 接下来看下黑箱的备忘录模式...o.restoreMemento(c.retrieveMemento()); } }/** 最后结论和之前的一样,但在设计上面已经很不同 */ 有时候发起人内部信息需要保存在别的地方,但是读取还是发起人自己,此时备忘录模式就可以把发起人信息对外封闭起来

41120

备忘录模式

概念 备忘录模式:又叫做快照模式,属于行为模式的一种,指在不破坏封装性的前提下,获取到一个对象的内部状态,并在对象之外记录或保存这个状态。在有需要的时候可将该对象恢复到原先保存的状态。...我们相当于把对象原始状备份保留,所以叫备忘录模式。 结构与组成 首先看一下备忘录模式的UML图: ?...备忘录模式主要包含:发起者对象(Originator)、备忘录(Memento)和管理者角色(Caretaker)三部分组成。...在备忘录模式中Caretaker负责把Originator进行备份,在需要的时候Originator可以使用Caretaker中保存的Originator进行恢复,Originator的各种状态就可以恢复到修改之前的状态...、缺点及适用场合 优点: 1、备忘录模式可以把发起人内部信息对象屏蔽起来,从而可以保持封装的边界。

59280

备忘录模式

备忘录模式,望文生义就知道它是用来做备忘的,或者可以直接说是“备份”。当需要保存当前状态,以便在不久要恢复此状态时,就可以使用“备忘录模式”。...其实不然,在《大话设计模式》中,作者提到了原因,这样会暴露更多的细节给客户端,不符合我们面向对象的思想。什么是暴露更多的细节给客户端?我们来看下面一段代码。...在备忘录模式中涉及到三个基本的类,一个是原始类,即需要备份的状态类,一个是备份类,即具体存储状态,还有一个管理者,用来提供备份状态类。...1 package day_27_memento; 2 3 /** 4 * 发起人,它要负责创建一个备忘录Memento用来记录当前时刻它的状态 5 * @author turbo 6...show(){ 24 System.out.println("state : " + state); 25 } 26 27 /** 28 * 创建备忘录

54070

设计模式-备忘录模式

定义 备忘录模式(Memento Pattern):是一种行为型设计模式,它定义了一个对象的内部状态,这个对象将状态保存下来,以便稍后恢复。...备忘录模式的关键点如下: 定义一个接口,用于定义备忘录对象的操作。 在接口中声明一个方法,用于创建一个备忘录对象。 在接口中声明一个方法,用于将备忘录对象的状态进行修改。...用途 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。...备忘录模式的应用场景包括但不限于: 需要对外部客户进行状态持久化存储的对象,如数据库中的记录。 需要对对象的状态进行修改的对象,如计数器。 需要对对象的状态进行优先级排序的对象,如用户等级查询系统。...通过备忘录模式,我们可以在不破坏封装性的情况下捕获和恢复对象的内部状态。

17020

备忘录模式

——《设计模式:可复用面向对象软件的基础》 图示 备忘录模式结构图: 结构图显示了备忘录模式的对象角色有三,一是发起人(Originator), 二是备忘录(Memento),三是管理者(Caretaker...备忘录模式流程图: 流程图展示了备忘录模式的工作流程: 1、管理者(Caretaker)调用发起人(Originator)createMemento创建备忘录保存状态 2、管理者调用发起人的setMemento...如果直接访问对象的状态会破坏封装,可以使用备忘录模式。 优点 你可以在不破坏对象封装情况的前提下创建对象状态快照。 缺点 如果客户端过于频繁地创建备忘录, 程序将消耗大量内存。...总结 备忘录模式,在不破坏封装型的前提下,获取并保存一个对象的内部状态,以便以后对象可以恢复到这个状态。...该模式有三个角色:发起人(Originator)、备忘录(Memento)、管理者(caretaker)。发起人创建备忘录和利用备忘录恢复状态,备忘录保存发起人状态,管理者保存备忘录

20040

备忘录模式

备忘录模式 基本概念 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。...这样以后就可将该对象恢复到原先保存的状态 可以这样理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。...而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作 备忘录模式属于行为型模式 UML类图 对原理类图的说明...-即 (备忘录模式的角色及职责) originator : 对象(需要保存状态的对象) Memento :备忘录对象,负责保存好记录,即Originator内部状态 Caretaker: 守护者对象,...4、数据库的事务管理 为了节约内存,备忘录模式可以和原型模式配合使用 不知上述代码是否看明白,个人建议稍微动手操作一下增加记忆。关于备忘录模式就讲到这里了。如果有帮助,欢迎点赞关注。

17220

设计模式--备忘录模式

备忘录模式(Memento Pattern)是一种行为设计模式,其目的是在不破坏对象封装性的前提下,捕获并外部保存对象的状态,并在日后将该对象状态恢复到之前的某个状态。...备忘录模式包括三个角色: Originator:原发器,创建需要存储的备忘录对象,以保存对象的状态。 Memento:备忘录,保存原发器状态的对象。 Caretaker:管理者,负责保存和恢复备忘录。...在没有访问备忘录内部状态的前提下负责保护备忘录。 以下是一个使用C#编写的备忘录模式的经典代码实例。实例中,我们使用备忘录模式记录一个数字的历史状态,并支持撤销到之前的某个状态。..._value = value; } public int GetValue() { return _value; } } // 原发器类,用于创建备忘录和恢复备忘录...History类则表示备忘录的管理者,包含一个Stack用于保存备忘录对象。通过这个例子,我们可以看到如何使用备忘录模式来记录对象的历史状态,并支持恢复到之前的某个状态。

18130

设计模式——备忘录模式

相当容易理解,举个简单的例子:Word 软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态; 一、备忘录模式的基本介绍 ---- 【1】备忘录模式(Memento Pattern...而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。 【3】备忘录模式属于行为型模式。...【5】为了节约内存,备忘录模式可以和原型模式配合使用。...二、备忘录模式的结构与类图 ---- 忘录模式的核心是设计备忘录类以及用于管理备忘录的管理者类,备忘录模式的主要角色如下: 【1】发起人(Originator)角色:记录当前对象的内部状态信息,提供创建备忘录和恢复备忘录数据的功能...三、备忘录模式案例分析 ----  我们使用备忘录模式写一个学校 100 米考试的案例:5 人一组,进行分组测试。我们需要备份的对象是,一组学生的成绩。

39040

设计模式-备忘录模式

备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。 就是实际的回退功能,将不同时间段的各状态数据依次存储至列表。...该模式又叫快照模式。 意义 备忘录模式 有点类似后悔药的功能,软件回档和撤回的功能就是备忘录的体现。...CCaretaker: 备忘录管理类。内部持有备忘录表,负责备忘录表的管理,实现备份和回退功能。...在使用此模式时,如果过度的备份,会导致大量内存被占用。因此我们可以设计一个阈值机制,当达到阈值,抛弃备忘录最原始的版本。这么一看备忘录设计成栈结构比较合适,先进后出。...备忘录模式的实现相对简单,也不唯一,在满足备忘录模式思想的情况下,实现方式合理即可。 另外,这么多的设计模式,不要纠结于该使用哪种,结合具体场景可选择一个或多个设计模式都是可行的。

30320

设计模式~备忘录模式

备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。...备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 备忘录模式常常和命令模式和迭代器模式一同使用。...存储这些快照的备忘录对象叫做此对象的历史;某个快照所处的位置叫做检查点。 备忘录角色(Memento) 备忘录角色由如下责任: 1. 将发起人(Originator)对象的内部状态存储起来。...备忘录有两个等效的接口:   窄接口:负责人(Caretaker)对象(和其他除发起人之外的任何对象)看到的是备忘录的窄接口(narrow interface),这个窄接口只允许它把备忘录对象传给其他的对象...负责人角色(Caretaker) 负责人角色有如下责任: 负责保存备忘录对象 不检查备忘录对象的内容 备忘录模式的白箱实现 ? 源代码清单:

36820

备忘录模式浅析

这种将对象状态外部化存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态,这就是本文今天要说的备忘录模式,又叫快照模式或者Token模式。 一....备忘录模式的基本介绍 意图 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 结构 备忘录模式的基本结构如下: ?...备忘录模式的示例 接下来,我们就模拟一个游戏存档的场景来给出一个备忘录模式的示例。...小结 优缺点 优点: 1、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界...如果状态改变的成功率不高的话,不如采取“假如”协议模式。 参考 [1]. 阎宏. Java与模式.电子工业出版社 [2]. Erich Gamma. 设计模式-可复用面向对象软件的基础.

39620
领券