备忘录

设计模式——行为型模式之备忘录模式(十)

二次信任 提交于 2019-12-05 01:06:00
备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决: 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 何时使用: 很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。 如何解决: 通过一个备忘录类专门存储对象状态。 关键代码: 客户不与备忘录类耦合,与备忘录管理类耦合。 应用实例: 1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。 优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。 缺点: 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。 使用场景: 1、需要保存/恢复数据的相关状态场景。 2、提供一个可回滚的操作。 注意事项: 1、为了符合迪米特原则,还要增加一个管理备忘录的类。 2、为了节约内存

备忘录模式

柔情痞子 提交于 2019-12-03 13:27:22
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决: 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 何时使用: 很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。 如何解决: 通过一个备忘录类专门存储对象状态。 关键代码: 客户不与备忘录类耦合,与备忘录管理类耦合。 应用实例: 1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。 优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。 缺点: 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。 使用场景: 1、需要保存/恢复数据的相关状态场景。 2、提供一个可回滚的操作。 注意事项: 1、为了符合迪米特原则,还要增加一个管理备忘录的类。 2、为了节约内存,可使用原型模式

第三章作业

巧了我就是萌 提交于 2019-12-03 09:33:09
第三章作业 一. 你对动态规划的理解 我对动态规划印象最深刻的就是备忘录法,几乎每一次都是在填表,先找出每一个子问题的递归方程,再是依次进行填表,动态规划和备忘录很类似,动态规划是自下向上解决问题的,而备忘录是自上向下解决问题的,但是基本都是一个数组进行填表对问题进行解决。 二. 分别列出编程题 1、2的递归方程 最长递增子序列 m[i] = max{m[k]+1 | a[k]<a[i]}(1<=k<i) 租用游艇 m[i] = min{c[i][k]+m[k[} (i<k<=n) 表示第 i到终点的最小费用 三.结对编程 通过结对编程,发现相互编程一些 bug并且解决问题 来源: https://www.cnblogs.com/1149640304penny/p/11785578.html

备忘录模式

匿名 (未验证) 提交于 2019-12-02 23:47:01
就是存档。把关键数据,存在一个列表中。所以需要一个存档中心类,一个执行存档的类。和一个被存档的类。 可以和命令模式,配合。并加上原型。会比较配。

备忘录模式-Memento

允我心安 提交于 2019-12-02 19:37:01
备忘录模式 用来恢复一个对象的状态到以前的状态。 通俗的说,就是把一个类的属性临时的保存在另一个地方,并提供一个接口可以还原,比较适用的场景是系统升级,代码回滚。 一、类图 备忘录模式 包含以下几个角色: Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。 Memento(备忘录):存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,除了原发器本身与负责人类之外,备忘录对象不能直接供其他类使用,原发器的设计在不同的编程语言中实现机制会有所不同。 Caretaker(负责人):负责人又称为管理者,它负责保存备忘录,但是不能对备忘录的内容进行操作或检查。在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不能修改对象,也无须知道对象的实现细节。 二、示例 考虑平时玩的通关游戏,每走一步时步数都加一,遇到道具可以快速走几步,或者减几步。用备忘录模式的思想来实现这个逻辑。 游戏类: class Game { /** * 玩家走的步数 */ private int playerStep; /** * 备份游戏 */ public GameMemento

备忘录

青春壹個敷衍的年華 提交于 2019-12-01 20:19:13
洲哥D1T2<splay中序遍历> 糊涂图<概率树P> 毛二琛 骆驼<大模拟> 异或 来源: https://www.cnblogs.com/2018hzoicyf/p/11716469.html

C#设计模式:备忘录模式(Memento Pattern)

∥☆過路亽.° 提交于 2019-12-01 12:00:31
一,C#设计模式:备忘录模式(Memento Pattern) 1、发起人角色(Originator):记录当前时刻的内部状态,负责创建和恢复备忘录数据。负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator【发起人】可以根据需要决定Memento【备忘录】存储自己的哪些内部状态。 2、备忘录角色(Memento):负责存储发起人对象的内部状态,在进行恢复时提供给发起人需要的状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker【管理角色】只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator【发起人】却可看到备忘录的宽接口,允许它访问返回到先前状态所需要的所有数据。 3、管理者角色(Caretaker):负责保存备忘录对象。负责备忘录Memento,不能对Memento的内容进行访问或者操作。 二,代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace _22.备忘录模式 { /// <summary> ///

备忘录(Memento)模式

大憨熊 提交于 2019-12-01 07:52:59
  备忘录模式又叫做快照模式或者Token模式。   备忘录对象是一个用来存储另一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一起使用。   常见的系统往往不止存储一个状态,而是需要存储多个状态。这些状态常常是一个对象历史发展的不同阶段的快照,存储这些快照的备忘录对象叫做此对象的历史;某一个快照所处的位置叫做检查点。 1.角色 1.备忘录角色 备忘录角色有如下责任:   (1)将发起人(Originator)对象的内战状态存储起来。备忘录可以根据发起人对象的判断来决定存储多少发起人(Originator)对象的内部状态。   (2)备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取。   备忘录有两个等效的接口:   ●   窄接口: 负责人(Caretaker)对象(和其他除发起人对象之外的任何对象)看到的是备忘录的窄接口(narrow interface),这个窄接口只允许它把备忘录对象传给其他的对象。   ●   宽接口: 与负责人对象看到的窄接口相反的是,发起人对象可以看到一个宽接口(wide interface),这个宽接口允许它读取所有的数据

简说设计模式——备忘录模式

ε祈祈猫儿з 提交于 2019-12-01 07:45:51
一.备忘录模式 备忘录这个词汇大家应该都不陌生,我就经常使用备忘录来记录一些比较重要的或者容易遗忘的信息,与之相关的最常见的应用有许多,比如游戏存档,我们玩游戏的时候肯定有存档功能,旨在下一次登录游戏时可以从上次退出的地方继续游戏,或者对复活点进行存档,如果挂掉了则可以读取复活点的存档信息重新开始。与之相类似的就是数据库的事务回滚,或者重做日志redo log等。 备忘录模式(Memento) ,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存着这个状态。这样以后就可将该对象恢复到原先保存的状态。UML结构图如下:   其中,Originator是发起人,负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态;Memento是备忘录,负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento;Caretaker是管理者,负责保存好备忘录的Memento,不能对备忘录的内容进行操作或检查。  1. 发起人角色   记录当前时刻的内部状态,并负责创建和恢复备忘录数据,允许访问返回到先前状态所需的所有数据。 1 public class Originator { 2 3 private String state; 4 5 public String getState() { 6

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

坚强是说给别人听的谎言 提交于 2019-12-01 02:48:39
备忘录模式(Memento):   后悔药来啦!!!备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在需要时能将该对象恢复到原先保存的状态。 备忘录模式的角色:      1)发起人(Originator):记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。   2)备忘录(Memento):负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。   3)管理者(CareTaker):对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。   根据上述UML图实现代码: 1 internal class Program 2 { 3 private static void Main(string[] args) 4 { 5 Originator o = new Originator(); 6 o.State = "On"; 7 8 Caretaker c = new Caretaker(); 9 c.Memento = o.CreateMemento(); 10 11 o.State = "Off"; 12 o.SetMemento(c.Memento); 13 } 14 } 15 16 /// <summary> 17 /// 备忘录