18 行为模式 - 备忘录(Memento)模式

需要跟进多重检查点。

 

1.用意

又叫快照模式或Token模式。

备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。

 

2.类图

 

白箱实现

 

黑箱实现



 

 

3.代码

 

白箱实现

/*
 * 备忘录角色
 */
public class Memento {
	private String state;
	public Memento(String state) {
		this.state = state;
	}
	public String getState(){
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
}


/*
 * 负责人角色
 */
public class Caretaker {
	private Memento memento;

	public Memento retrieveMemento() {
		return memento;
	}

	public void saveMemento(Memento memento) {
		this.memento = memento;
	}
}


/*
 * 发起人角色
 */
public class Originator {
	private String state;

	public Memento createMemento() {
		return new Memento(state);
	}

	/*
	 * 将发起人恢复到备忘录对象所记载的状态
	 */
	public void restoreMemento(Memento memento) {
		this.state = memento.getState();
		S.s("Current state = " + this.state);
	}

	public String getState() {
		return this.state;
	}

	public void setState(String state) {
		this.state = state;
		S.s("Current state = " + this.state);
	}
}


/*
 * 测试类
 */
public class Test {

	private static Originator o = new Originator();
	private static Caretaker c = new Caretaker();
	
	public static void main(String[] args) {		
		o.setState("On");
		c.saveMemento(o.createMemento());
		o.setState("Off");
		o.restoreMemento(c.retrieveMemento());
	}
}
  黑箱实现
/*
 * 标识接口
 */
public interface MementoIF {
}


/*
 * 负责人角色
 */
public class Caretaker {
	private MementoIF memento;

	public MementoIF retrieveMemento() {
		return this.memento;
	}

	public void saveMemento(MementoIF memento) {
		this.memento = memento;
	}
}


/*
 * 发起人角色
 */
public class Originator {
	private String state;

	public Originator() {
	}
	
	public MementoIF createMemento() {
		return new Memento(this.state);
	}

	/*
	 * 将发起人恢复到备忘录对象所记载的状态
	 */
	public void restoreMemento(MementoIF memento) {
		Memento aMemento = (Memento)memento;
		this.setState(aMemento.getState());
		S.s("Current state = " + this.state);
	}

	public String getState() {
		return this.state;
	}

	public void setState(String state) {
		this.state = state;
		S.s("Current state = " + this.state);
	}
	
	/*
	 * 备忘录角色
	 */
	protected class Memento implements MementoIF{
		private String savedState;
		public Memento(String someState) {
			this.savedState = someState;
		}
		public String getState(){
			return savedState;
		}
		public void setState(String someState) {
			this.savedState = someState;
		}
	}
	
}


/*
 * 测试类
 */
public class Test {

	private static Originator o = new Originator();
	private static Caretaker c = new Caretaker();
	
	public static void main(String[] args) {		
		o.setState("On");
		c.saveMemento(o.createMemento());
		o.setState("Off");
		o.restoreMemento(c.retrieveMemento());
	}
}
 

 

z

stable-diffusion-webui的逐步部署教程 本文主要介绍了stable-diffusion-webui的逐步部署教程,希望能对使用Stable Diffusion的同学们有所帮助。 文章目录 1. 前言 2. 逐步部署教程 2.1 创建Python环境 2.2 安装依赖库 2.3 运行代码 阅读详情

相关推荐

Docker环境下onlyOffice 7.5.1破解版部署全攻略(含ARM架构适配)

本文提供了在Docker环境中部署OnlyOffice 7.5.1破解版的完整实战指南。内容涵盖x86与ARM架构服务器的详细部署步骤、环境配置、持久化存储设置以及生产环境下的安全与性能优化。重点解决了ARM架构适配的常见问题,并分享了使用Docker Compose进行服务编排和日常维护的技巧,帮助用户快速搭建私有化文档协作平台。

redis7keeper的博客 354

Java设计模式(十九)----备忘录模式

备忘录模式 一、 概念 二、 结构 三、 分类 1.”白箱”备忘录模式的实现 2.“黑箱”备忘录模式的实现 3.“多重”检查点 4.”自述历史”模式 引子 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状 态。比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行...

weixin_34174132的博客 197

常用的集成TTL门电路

本篇主要分析了常用的逻辑门电路与非门,详细分析了电源原理。值得收藏。

ManagerUser的博客 5090

Memento 备忘录模式

        Memento 备忘录模式: 在不破坏封装性的前提下,捕获一个对象的内部状态, 并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态. 一个备忘录(memento)是一个对象,它存储另一个对象在某个瞬间的内部状态, 而后者称为备忘录的原发器(originator). 当需要设置原发器的检查点时, 取消操作机制会向原发器请求一个备忘录. 原发器用描述当前状态的信息初

zhangcunli的专栏 601

安装Quartus-II 13 和Modelsim

目录一、Quartus-II安装1.Quartus-II 13下载2.Quartus-II 13安装3.Quartus-II 13注册二、Modelsim安装 实验目的:安装Quartus-II 13 和Modelsim 实验环境:Windows10 参考资料:Quartus-II安装及使用 一、Quartus-II安装 1.Quartus-II 13下载 正点原子官方资料下载 百度网盘下载链接: https://pan.baidu.com/s/1a9d-bq9RZmWrRV542X4IEA 提取码:

qqq080的博客 8641

Python爬虫实战:5分钟抓取东方财富股票数据并保存为CSV

在投资分析与量化研究的日常工作中,获取结构化、可用的金融数据往往是第一步。对于个人投资者和量化入门者而言,如何高效获取A股全市场行情,常常面临网页动态加载、反爬机制与数据整理繁琐等挑战。本文从数据采集的基础概念出发,介绍如何利用Python这一通用编程语言,通过requests库请求财经网站公开的HTTP接口,获取返回的JSON数据,再借助pandas进行字段映射、数据清洗与表格化处理。这种方式相比传统页面解析具有响应快、结构稳定、易于批量操作的显著优势,尤其适合构建个人股票数据池、验证选股策略或进行市场情

weixin_33146151的博客 251

Java备忘录模式(Memento)

  本文我们来介绍下java23种设计模式中的备忘录模式。 备忘录模式Memento 使用场景 录入大批人员资料。正在录入当前人资料时,发现上一个人录错了, 此时需要恢复上一个人的资料,再进行修改。 Word文档编辑时,忽然电脑死机或断电,再打开时,可以看到word 提示你恢复到以前的文档 管理系统中,公文撤回功能。公文发送出去后,想撤回来 核心内容   就是保存某个对象内部状态的拷贝,这样以...

波波烤鸭的博客 20万+

PCB高速信号换层孔新技术:VECS(Vertical Conductive Structure Technology)解析

摘要:垂直导电结构(VeCS)是一种新型PCB互连技术,由平板信号走线和椭圆形接地层构成半同轴结构,相比传统过孔具有显著优势。通过全波仿真和实测验证,VeCS展现出更好的阻抗连续性、更低的插入损耗和回波损耗,以及优异的串扰抑制能力。其椭圆形接地结构能有效隔离电磁干扰,在相同布线密度下远端串扰比传统过孔降低约50%。VeCS制备工艺与传统PCB工艺兼容,无需新增设备,且能实现更高密度互连。测试结果显示,2.5英寸带状线通道中VeCS结构的信号完整性表现明显优于传统过孔,为高速数字系统提供了更可靠的垂直互连解决

小孟同学的博客 202

设计模式-备忘录模式 重返18岁

重返18岁 经常有人说,如果我要能回到几年前,我一定要干什么什么,比如我要买一堆房子,我要买比特币,我要… 时空到底能不能穿越,这个事情交给科学家,个人觉得这个也不是一百年可以搞定的事情。 但是程序是可以实现穿越的,回到18岁,不成问题。 这就是我们今天要讲的一种设计模式:备忘录模式(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象的状态。这样以后就可以将该对象恢复到原先保存的状态。 我们经常见的:游戏存档、数据库事务回滚、redo log等都可以说是备忘录模式

qq_36291682的博客 3489

YOLOv11改进,YOLOv11结合DynamicConv(动态卷积),CVPR2024,二次创新C3k2结构

DynamicConv(动态卷积)是一个用于提高卷积神经网络(CNN)性能的技术,核心思想是动态地生成卷积核(filter),而不是使用固定的卷积核。通过引入更多的计算灵活性和适应性来增强卷积操作的表达能力,进而提升模型的性能。专家选择:DynamicConv 通过引入多个“专家”(experts),每个专家学习特定的卷积模式。输入图像的不同部分会选择不同的专家进行卷积。动态卷积核生成:根据输入的不同特征,专家网络动态地生成卷积核,而不是使用固定的卷积核。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2266

【明道云】如何让用户可以新增但不能修改记录

在设计表单时直接将字段设置只读是不行的。字段设置只读将会直接让界面上此字段的前端组件不可编辑。

每日出拳老爷子的博客 701

【Java教程】Day20-18 设计模式:行为型模式——备忘录模式(Memento)

备忘录模式(Memento Pattern)主要用于捕获一个对象的内部状态,并将该状态保存到外部,在不破坏封装性的前提下,能够在后续恢复该状态。这种模式的核心思想是:通过备份对象的状态,使得对象能够在不暴露内部结构的情况下进行状态恢复。 在现实生活中,我们经常会遇到类似的场景:文本编辑器的“撤销”和“重做”功能,图像编辑器的“撤回”和“恢复”,甚至一些高级软件的历史版本管理,都是备忘录模式的应用场景。

max202011161630的博客 707

ARMv8/ARMv9的TLB深度学习

千万不要人云亦云。一个TLB entry里有很多很多东西的,有100多个比特位呢,并不是仅仅只有VA/PA/nG/VMID/ASID等。.👉👉👉 个人博客笔记导读目录(全部) 👈👈👈。

baron-周贺贺-代码改变世界ctw 1571

设计模式精讲 Day 18:备忘录模式(Memento Pattern)

备忘录模式是一种行为型设计模式,它允许在不暴露对象内部状态的情况下,捕获并存储该对象的状态,以便后续恢复。通过这种方式,可以实现对象的回退、撤销等功能。核心思想保存状态:在对象发生变化之前,将其状态保存下来。恢复状态:在需要的时候,将对象恢复到之前保存的状态。封装性:状态的保存和恢复过程对外部是透明的,不依赖于对象的内部实现。本篇文章详细讲解了备忘录模式的定义、结构、适用场景、实现方式及优缺点分析,并通过一个文本编辑器的案例展示了其实际应用场景。

在未来等你的专栏 1076

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

1 引言 在我们写文档写代码的时候,总想回到以前的某个状态,怎么实现了?按ctrl+z或者command+z实现,助我们恢复到想要的某个状态。在软件设计中,有一种设计模式与之对应---备忘录(Memento)模式。 2 定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。 3 结构与实现 备忘录模式主要包含以下三个角色: 1.发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备

honor_zhang的博客 875

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

设计模式之备忘录模式

目录 备忘录模式mememto 概念 应用场景 角色和职责​ 案例 备忘录模式mememto 概念 Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。 一个类需要保存它的对象的状态(相当于Originator角色) 设计一个类,该类只是用来保存上述对象的状态(相当于Mem

baidu_41388533的博客 277

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

设计模式:可复用面向对象软件及基础:4-6 对象行为模式:备忘录模式(Memento)

概念 Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 应用场景 如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。 1)一个类需要保存它的对象的状态(相当于Originator角色) 2)设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色) 3)需要的时候,Caretaker角色要求Or...

LIJIWEI0611的博客 218

程序设计模式(十六) C++ 备忘录( Memento)模式

备忘录模式就是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 场景: (1)我们玩单机游戏的时候总会遇到老婆大人的各位事情,一会去买瓶醋了,一会去打个酱油了,会耽误我们玩游戏的进程,但是此时我们能有“保存游戏”这个宝贝,我们的主基地不会在我们打酱油的时候被对手拆掉。     这“保存游戏”的功能其实就是备忘录模式

llg070401046的博客 669

18、Memento 备忘录模式

例如:用于记录快照(顺势状态)、存盘 1、Memento Memento设计模式是一种软件设计模式,用于将对象回滚到其先前状态。它是行为设计模式的一部分,与算法和对象之间的职责分配有关。 行为模式描述了处理对象或类之间的通信的模式。在恢复对象状态时,Memento设计模式具有很大的适用性。需要用户退回到先前状态的应用程序利用了记忆设计模式。 这种设计模式的目的是通过不将信息暴露在所需对象之外而不...

qq_42390636的博客 136

设计模式之18 - 备忘录模式Memento

有时候我们需要记录一个对象的状态,用于该对象在某些状况下的恢复,这种模式 我们称之为 备忘录模式。         就像你录一段 婚礼视频,写一篇日记 是一样的, 备忘录模式 类结构图定义如下: 发起人(Originator):需要备份的对象,将自身的属性信息拷贝到一个 备忘录对象,并能够通过备忘录中的属性信息 进行恢复; 备忘录(Memento):保存发起人状态,提供set,get

跟随技术的脚步-linolzhang的专栏 501

设计模式每日硬核训练 Day 18:备忘录模式(Memento Pattern)完整讲解与实战应用

本文详细讲解了备忘录模式(Memento Pattern)的设计与应用。该模式在不破坏封装的前提下保存对象内部状态,支持状态回滚。文章通过文本编辑器撤销操作实例,展示了备忘录模式的UML结构和C++实现,包含Originator、Memento、Caretaker三个核心角色。对比了备忘录模式与原型模式的区别,并解答了面试常见问题。最后提供了两个练习题:文本状态保存器和图形编辑器撤销操作,帮助读者深入理解该模式的实际应用场景。该模式适用于需要撤销/恢复功能的场景,如文档编辑、游戏存档等。

Interview_TC的博客 823

大话设计模式C++实现-第18章-备忘录模式

一、UML图 二、概念 备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。 三、说明 角色: (1)Originator(发起人):负责创建一个Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储

西青年·部落格 1664

备忘录模式(Memento)

一、备忘录模式介绍 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 例如: 1.office重新打开时的恢复功能。 2.事务的回滚操作 备忘录模式UML图: Originator(发起人):负责...

chuankangyu5735的博客 123

16、Memento 备忘录模式

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态。 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态。比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来进行返回。这时我们便可以使用备忘录模式来实现。 类图 代码...

sinat_37138973的博客 263

Java设计模式全集-备忘录模式(Memento)

备忘录模式(Memento) 所谓的备忘录,顾名思义,可以用来备份的东西,比如游戏的存档,数据库的快照等等,就是对某一项内容进行数据备份,在必要时可以通过这个备份进行数据的恢复或者回退,将数据恢复或者回退到备份前的状态 简单来说,以前有些游戏,需要到存盘点才可以存盘,这时候你没有存盘,跑去打BOSS,结果又没打赢,死了。这时候读取的存档,就是一份备忘录 Java的序列化接口 要实现java的默认序列化与反序列化,则必须实现Serializable接口,建议添加serialVersionUID,且生

小萤哥的博客 330

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

概念 Memento模式也叫备忘录模式,是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这一状态,这样以后就可以将该对象恢复到原先保存的状态 设计要点 Memento 模式中封装的是需要保存的状态,当需要恢复的时候才取出来进行恢 复.原理很简单,实现的时候需要注意一个地方:窄接口和宽接口.所谓的宽接口就 是一般意义上的接口,把对外的接口作为 public 成员;而窄接口反之,把接

weixin_45606518的博客 471
上一篇: 17 行为模式 - 命令(Command)模式
下一篇: 19 行为模式 - 状态(State)模式
O2AtomLife
博客等级 码龄19年 2粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值