设计模式 -- 备忘录模式

news/2024/5/11 15:49:40/文章来源:https://blog.csdn.net/w5_Silence/article/details/130577887

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是备忘录模式?

        备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下捕获和外部化对象的内部状态,以便稍后可以将对象恢复到原始状态。该模式通常用于需要撤销操作或快照功能的场景。

二、备忘录模式的优缺点:

优点:

  1. 备忘录模式可以轻松地实现对象状态的保存和恢复,这对于需要进行撤销、重做或者历史记录功能的应用程序非常有用。

  2. 通过将状态保存到备忘录中,可以避免在原始对象中暴露状态数据,从而提高了对象的封装性和安全性。

  3. 备忘录模式可以在不破坏封装性的情况下实现状态的保存和恢复,这对于复杂对象或者需要频繁保存状态的对象非常有用。

  4. 备忘录模式可以使得代码更加灵活和可扩展,因为它允许开发人员在不修改原始对象的情况下添加新的备忘录类型或者修改现有的备忘录类型。

缺点:

  1. 备忘录模式可能会导致内存占用问题,因为需要保存对象的状态,如果对象状态较大或者状态保存的次数过多,可能会导致内存占用过高。

  2. 备忘录模式可能会影响程序的性能,因为每次保存对象状态都需要创建一个备忘录对象并将其保存到备忘录管理器中,这会增加程序的开销。

  3. 备忘录模式可能会增加程序的复杂度,因为需要维护备忘录对象和备忘录管理器,这会增加代码的复杂度和维护成本。

三、备忘录模式的结构:

 

四、备忘录模式实战:

1.创建Memento

 2.创建CareTaker

 3.创建Originator

 4.测试

 5.结果

 

五.总结:

备忘录模式的应用场景:

  1. 撤销操作:当需要实现撤销操作时,可以使用备忘录模式来保存对象的状态,以便在需要撤销时可以恢复对象的状态。

  2. 编辑器:在文本编辑器或图形编辑器中,可以使用备忘录模式来保存文本或图形对象的状态,以便在需要恢复时可以还原对象的状态。

  3. 游戏:在游戏中,可以使用备忘录模式来保存游戏状态,以便在需要恢复时可以还原游戏的状态。

  4. 数据库操作:在数据库操作中,可以使用备忘录模式来保存数据库的状态,以便在需要恢复时可以还原数据库的状态。

  5. 操作系统:在操作系统中,可以使用备忘录模式来保存系统的状态,以便在需要恢复时可以还原系统的状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_298082.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑cpu占用率高?怎么办?1分钟快速解决!

案例:电脑cup过高怎么办? 【我的电脑运行缓慢,导致我学习和工作的效率很低。刚刚查看了一下电脑,发现它的cpu占用率很高。有没有小伙伴知道如何解决此电脑cpu过高的问题?】 电脑是我们生活中不可缺少的工具&#xff…

1— .Net MVC之控制器

在上下文中使用的控制器 问题 答案 什么是控制器? 控制器包含用于接收请求、更新应用程序状态或模型以及选择将发送给客户端的响应的逻辑 控制器有什么用? 控制器是MVC项目的核心,并包含Web应用程序的逻辑 如何使用控制器? …

接口自动化测试神器:Python+Requests+Unittest让你的测试用例飞起来

B站首推!2023最详细自动化测试合集,小白皆可掌握,让测试变得简单、快捷、可靠 随着互联网的发展,越来越多的应用程序采用了分布式架构,并通过API接口进行数据交换。因此,接口自动化测试已经成为了保证软件质…

过滤器对前端请求参数进行解码URLDecoder,接口接收参数类型为map,解码无效问题

文章目录 一、前言二、设计思路三、代码实现四、启动测试五、过滤器解码无效六、源码跟踪七、解决方案八、再次重启测试九、总结 一、前言 最近做的一个公司项目,因为客户需要对特殊字符做搜索,但是前端的请求参数无法传递到后端,所以前端对…

光耦继电器和普通继电器的区别概述

光耦继电器和普通继电器都是电气传感器元件中的一种,其都能够将电能转化成机械能,并实现各种开关控制和保护控制。但光耦继电器与普通继电器最大的区别在于其输入电路与输出电路之间通过光电转换器件,而不是实现物理接触。本文将从结构、工作…

Spring MVC——Rest风格

REST(Representational State Transfer) 当我们想表示一个网络资源的时候,可以使用两种方式: 我们分别用查询id为1的用户信息与保存用户信息举例传统风格资源描述形式 http://localhost/user/getById?id1http://localhost/user/saveUser RES…

记一次azkaban调度异常处理

一、背景 预发布环境使用的数据库性能比较低,根据业务测试的需求,需要将数据库更换成 稳定高性能的数据库。更换业务数据库后azkaban定时任务失败 二、数据库服务信息 说明:该部分使用代号来代替,非真实信息 该数据库存储了azka…

linux彻底卸载mysql步骤

第一步,先查看是否安装了mysql mysql -u root -p 如果提示bash: mysql: command not found...则没有安装过mysql 如果提示需要输入密码,那就证明安装了mysql 第二步,查看mysql运行状态并关闭 先查看下mysql的运行状态(如果已经…

电脑缺少msvcp140.dll怎么办,缺少msvcp140一键修复方法

电脑缺少msvcp140.dll怎么办?这个问题相信不少小伙伴都遇到过,msvcp140.dll文件是很多软件跟游戏运行必须用到的文件,如果丢失或者损坏,很多软件都会无法打开运行。其实知道知道方法,修复起来其实也不会很难&#xff0…

OAK相机如何将 YOLO NAS 模型转换成blob格式?

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…

k8s pv pvc的使用

k8s pv pvc的使用 安装nfs服务器 yum install rpcbind nfs-utils -y systemctl enable rpcbind systemctl enable nfs systemctl start rpcbind systemctl start nfsmkdir -p /root/data/sc-data [rootmaster sc-data]# cat /etc/exports /root/data/sc-data 192.168.1.0/24(…

运营商三要素验证原理,这篇文章就够了!

引言 运营商三要素验证 API 是一种基于手机号码、身份证号码和姓名等三种信息的验证服务,主要用于验证用户身份信息的真实性和一致性,以及查询手机号码所属的运营商信息。 运营商三要素 API 的验证原理 1. 身份验证的原理 身份信息验证是运营商三要素…

系统安全分析与设计

目录 第五章、系统安全分析与设计1、信息系统安全属性2、对称加密技术与非对称加密技术3、信息摘要4、数字签名5、数字信封与PGP6、网络安全6.1、各个网络层次的安全保障6.2、网络威胁与攻击6.3、防火墙 第五章、系统安全分析与设计 1、信息系统安全属性 安全属性 保密性&…

JavaScript实现求1-100之间不能被3整除的数之和,求100以内偶数的和的两个程序代码

以下为实现求1-100之间不能被3整除数之和求100以内偶数的和的两个程序代码和运行截图 目录 前言 一、实现输入两个数比较两个数的大小 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、求100以内偶数的和 2.1 运行流程及思想 2.2 代码段 2.3…

北峰通信,用专业打造“全方位、立体化”应急通信保障体系

最近热映的电影《惊天救援》里,杜江饰演的消防员韩凯,在一次化工园区发生爆炸后,他作为消防救援站里的通信员,第一时间奔赴重灾区,及时将第一现场的情况传到了后方指挥部。 众所周知,通讯系统是生命线系统的…

685页40万字某省市场监管智慧应用一体化项目(word可编辑)

1.2.3.1 数字XX公共能力建设现状 1.2.3.1.1 数字XX通用基础应用平台现状 通用基础应用平台提供具有共性特征的跨部门、跨层级业务应用,与本项目有关的平台包括某省网上办事大厅、某省政务服务 APP 统一平台(X政通 APP)、某省公共信用信息平…

rk3568 修改开机logo

rk3568 修改开机显示logo Android 显示 logo 的作用是为了标识应用程序或设备的品牌和身份。在应用程序中,logo 可以帮助用户快速识别应用程序,并与其他应用程序区分开来。在设备中,logo 可以帮助用户识别设备的品牌和型号,以及与…

python操作集合

# 集合 l{1,2,1} print(l) sset(range(5)) print(s)# 判断in 或 not in print(5 not in l) # 集合元素新增操作 l.add(4) l.update(1,3,6) print(l) l.update((1,3,5)) l.update([4,4,6]) # 删除集合元素 l.remove(2) l.discard(2) # 无目的的删除 自己不带参数 l.pop() l.cl…

AutoCV第七课:ML基础

目录 ML基础前言1. 复习sqrt函数2. 线性回归预测房价2.1 问题分析2.2 代码实现2.3 总结 个人总结 ML基础 前言 手写AI推出的全新保姆级从零手写自动驾驶CV课程,链接。记录下个人学习笔记,仅供自己参考。 本次课程主要学习复习 sqrt 函数和线性回归预测房…

【C++】-const对象及成员函数之类和对象中篇完结(中)

💖作者:小树苗渴望变成参天大树 ❤️‍🩹作者宣言:认真写好每一篇博客 💨作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C 文章目录 前言一、案例的引入二、const对象和成员函数三、取地…