备忘录

设计模式之备忘录模式

风格不统一 提交于 2020-01-03 09:46:27
定义 备忘录模式(Memento Pattern)用来恢复一个对象的状态到以前的状态。 备忘录模式下属于行为模式的类别。 uml 备忘录模式主要包含入下几个角色: Originator(原发器):它是一个普通类,可以创建一个备忘录,并储存该类当前的一些内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。 Memento(备忘录):存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,除了原发器本身与负责人类之外,备忘录对象不能直接供其他类使用。 Caretaker(负责人):负责人又称为管理者,它负责保存备忘录,但是不能对备忘录的内容进行操作或检查。在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不能修改对象,也无须知道对象的实现细节。 在备忘录模式中,最重要的就是备忘录Memento了。由于在备忘录中存储的是原发器的中间状态,因此需要防止原发器以外的其他对象访问备忘录,特别是不允许其他对象来修改备忘录。 为了不破坏备忘录的封装性,我们需要对备忘录的访问做些控制: 对原发器:可以访问备忘录里的所有信息。 对负责人:不可以访问备忘录里面的数据,但是他可以保存备忘录并且可以将备忘录传递给其他对象。 其他对象:不可访问也不可以保存

Matlab备忘录模式

耗尽温柔 提交于 2019-12-23 09:21:07
备忘录模式(Memento)用于保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式,主要包括源发器,备忘录以及负责人。源发器:普通类,可以创建备忘录,也可以使用备忘录恢复状态。备忘录:储存原发器内部状态,处理原发器和负责人类,备忘录不直接和其他类交互。 负责人:保存备忘录,但是不对备忘录操作或检查 存档、undo 、数据库的事务管理用到了备忘录模式。本文参考以下类图,用matlab语言实现备忘录模式。 Originator.m classdef Originator < handle properties state end methods function mem = createMemento(obj) mem = Memento(obj.state); end function restoreMemento(obj, mem) obj.state = mem.state; end end end Memento.m classdef Memento < handle & matlab.mixin.Heterogeneous properties state end methods function obj = Memento(state) obj.state = state; end end end CareTaker.m classdef

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

匆匆过客 提交于 2019-12-20 18:58:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本章讲讲第三类和第四类。 备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。做个图来分析一下: Original类是原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值。Memento类是备忘录类,Storage类是存储备忘录的类,持有Memento类的实例,该模式很好理解。直接看源码 public class Original { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Original(String value) { this.value = value; } public Memento createMemento(){ return new Memento(value); } public void

IOS设计模式-备忘录模式

不打扰是莪最后的温柔 提交于 2019-12-20 18:29:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、如何存储记录 在存储记录时,第一步我们需要用一把钥匙去打开一把锁。第二步,当我们打开锁之后就会有黑盒子,我们一开始还不知道里面有什么,所以是黑盒子。 1、存储记录的必要性 生活中,比如去超市购物有时候就需要在入口储物柜存放自己的包裹 2、记录的唯一标示 储物柜对应一把钥匙和号码标示。 3、存储记录与取出记录 =============================================================================================== 根据上面的思维导图:备忘录模式有:1.有key值(唯一标示符) 2.获取与key对应的存储物品 3.可以存储多样性的对象。 备忘录模式的UML图: 2、备忘录模式的基本原理 Originator起因;起源;创作者;发起人,对象:能够生成备忘录中心的状态值 Memento纪念品,记录,备忘录中心,能够将对象生成的备忘录中的状态值进行存储或者取出值 Caretaker看门人,备忘录中心存在黑箱子里的物品   设计存储中心,比如超市里的储物柜   指定存储接口,   实现存储机制, 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一

大话设计模式:备忘录模式

一世执手 提交于 2019-12-19 06:07:14
一、什么是备忘录模式 在不破坏对象内部状态的情况,捕获状态,并在外部保存该状态 保存一个对象的某一状态,以便在适当的时候恢复对象,这样对象就能恢复到之前的状态了。提供了可以恢复状态的机制,发起人可以让其恢复到某个历史状态。 UML图 Originator :发起人类,到时候需要存储它的不同状态,里面有一个存储状态方法和一个 恢复状态方法 Memento :备忘录,里面就是一堆数据,发起人类需要存储的数据 Caretaker :管理者,管理备忘录 二、适用场景 需要保存恢复的场景,可以回滚的操作.比如游戏的存档,你在打Boss之前可以先存一下档,然后这局boss打的不理想,就能恢复到存档的状态。比如浏览网页时跳到下一页,也可以回退到上一页。比如手机APP的一些操作,都可以回退。VS编写代码就可以很好的回退,使用Ctrl+Z ,Ctrl+Y操作。 三、优缺点 优点 可以保存想要的状态,在适当的时机恢复到该状态 封装了信息细节 缺点 资源消耗大,占用存储空间 四、大话中的例子 李逍遥战斗的例子, 在战斗之初 状态都是满的,存下档, 进去和boss战斗,状态都为0了,恢复一下状态, 状态又满了。李逍遥的类,属性:攻击 ,属性:生命值,存储状态的方法, 恢复状态的方法。一个备忘录,属性就是李逍遥的那些需要保存的属性。 一个管理器类,持有备忘录。李逍遥和管理器耦合。 五、我的例子 using

Java学习个人备忘录之抽象类

不打扰是莪最后的温柔 提交于 2019-12-19 05:29:10
抽象类 特点: 1. 方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中。该类必须也被abstract修饰 2. 抽象类不可以被实例化. 为什么? 因为调用抽象方法没意义。 3. 抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类还是抽象类。 abstract class 犬科 { abstract/*抽象*/ void show(); }//抽象方法所在的类也必须的抽象的. class 狗 extends 犬科 { void 吼叫() { System.out.println("汪汪"); } } class 狼 extends 犬科 { void 吼叫() { System.out.println("嗷嗷"); } } class AbstractDemo { public static void main(String[] args) { } } 细节理解: 1. 抽象类中有构造函数吗? 有,用于给子类对象进行初始化. 2. 抽象类可以不定义抽象方法吗? 可以,但是很少见,目的就是不让该类创建对象. AWT的适配器对象就是这种类. 通常这个类中的方法有方法体,但是却没有内容. abstract class Demo { void show1() {} void show2() {} } 3.

Core 2.2 项目升级至 3.0 备忘录

不羁岁月 提交于 2019-12-19 01:33:08
本文梯子 缘起 前言 零、NetCore3.0 有哪些新特性 一、项目启动部分 1、安装SDK 2、更新框架以及所有依赖 3、宿主机变化(Program.cs) 4、Host 环境变量(Startup.cs) 二、MVC 部分 1、MVC 服务注册(Startup.cs) 2、MVC 中间件的拆分(Startup.cs) 3、注意:中间件的顺序 三、Swagger 部分 1、代码修改对比图(ConfigureServices) 2、修改后的完整代码 四、Autofac 部分 1、代码修改对比图 2、修改后的完整代码 3、变化的核心点 五、Sqlsugar 部分 六、Authorization 部分(基本解决) 七、JSON 部分 1、接口返回格式 八、SignalR 部分 九、CORS 部分 十、MiniProfiler 部分 END、Github && Gitee 正文 缘起 1、哈喽大家中秋节(后)好呀!感觉已经好久没有写文章了,但是也没有偷懒哟,我的视频教程《 系列一、NetCore 视频教程(Blog.Core) 》也已经录制八期了,还在每周末同步更新中,欢迎大家多多指教。 2、除此之外呢,我也在平时的时间帮朋友开发了一个小项目,就是使用 .net mvc+vue+ele+mongo 框架写的项目,之前一直想着用mvc结合着vue写,这次也终于上手了,不过是一个小的demo

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

早过忘川 提交于 2019-12-16 01:16:47
在软件使用过程中用户难免会出现一些误操作,例如不小心删除了某些文字或图片,对于这些误操作需要提供一种“后悔药”的机制,实现撤销操作,例如我们常用Ctrl + Z。 备忘录模式正式为了解决此类撤销问题而诞生的,它为软件提供了“后悔药”,通过使用备忘录模式可以让系统恢复到某一特定的历史状态。 定义 在不破会封装的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 结构 Originator(原发器) 原发器是一个普通类,它通过创建一个备忘录来存储当前内部状态,也可以使用备忘录来恢复其内部状态,一般将系统中需要保存内部状态的类设计为原发器。 Memento(备忘录) 备忘录用于存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,除了原发器本身与负责人类之外,备忘录对象不能直接提供其他类使用,原发器的设计在不同的编程语言中谁先机制会有所不同。 Caretaker(负责人) 负责人又称为管理者,它负责保存备忘录,但是不能对备忘录的内容进行操作或检查。在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不能修改对象,也无须知道对象的实现细节。 举例说明 象棋的悔棋功能。 1.原发器 - 象棋棋子类 // 原发器 - 象棋棋子 @Setter

自制备忘录

大城市里の小女人 提交于 2019-12-13 21:10:44
//如何添加Date类型的生日日期 Date birthday=new SimpleDateFormat("yyyy-MM-dd").parse("2000-11-11"); user.setBirthday(birthday); //如何添加 创建日期 user.setCreationDate(new Date()); 数据库 anotes 表:notes 用ssh框架 spring + Struts2+hibernate 来源: CSDN 作者: wudingan 链接: https://blog.csdn.net/wudingan/article/details/103530627

设计模式(15):备忘录模式

夙愿已清 提交于 2019-12-10 02:42:48
本章节我们来聊一聊备忘录模式,备忘二字应该好理解吧,什么是备忘呢?我的理解是这样的:就是说早在做一件事情之前,我需要对某些资源进行备份,以便于在出现失败后恢复到处理之前的状态。跟mysql事务实现逻辑差不多哟,在改数据之前先将原来的数据写入日志,如果修改失败,将日志的数据回滚到库。 备忘录模式呢也是来干这个事情的,我们先看看备忘录模式的定义: 备忘录模式(Memento Pattern)提供了一种弥补真实世界缺陷的方法,让“后悔药”在程序的世界中真实 可行,其定义如下:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以 后就可将该对象恢复到原先保存的状态,通俗地说,备忘录模式就是一个对象的备份模式,提供了一种程序数据的备份方法。 我们看看备忘录模式的通用类图: ● Originator发起人角色 记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。 ● Memento备忘录角色 负责存储Originator发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。 ● Caretaker备忘录管理员角色 对备忘录进行管理、保存和提供备忘录。 代码结构如下: Originator: Memento: CareTaker: Test: 总结:备忘录模式比较简单,使用场景比较少,我们就不深入研究了,如果在开中遇到了