设计模式 -- 备忘录模式

news2024/11/15 17:35:59

前言

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

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

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

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

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

一、什么是备忘录模式?

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

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

优点:

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

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

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

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

缺点:

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

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

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

三、备忘录模式的结构:

 

四、备忘录模式实战:

1.创建Memento

 2.创建CareTaker

 3.创建Originator

 4.测试

 5.结果

 

五.总结:

备忘录模式的应用场景:

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

邮件营销自动化:优化营销流程,提升转化率

对于希望与客户联系,并推广其产品或服务的企业来说,电子邮件营销是一个强大的工具。然而,随着电子邮件通信量的持续增长,企业要跟上客户对个性化和及时性消息的需求,可能会面临一定的挑战。而这就是电子邮件营销自动化…

干货满满!破解FP安全收款难题

怎样安全收款是做擦边产品卖家比较忧虑的问题,2023年已经即将来到了年中,跨境卖家们在这一方面做得怎么样了呢? 这期分享破解FP独立站收款难题的方法。 一、商家破解FP收款难题方法 1.第三方信用通道 优点:信用卡在国外使用率比…

强化学习p2-价值学习

基本概念 折扣回报(Discounted Return) 在 MDP 中,通常使用折扣回报 (discounted return),给未来的奖励做折扣。折扣回报的定义如下: U t R t γ R t 1 γ 2 R t 2 γ 3 R t 3 . . . U_t R_t\gamma R_{t1}\gamma ^2R_{t2}\gamma ^3R_{t3}...…

【IoT】<硬件产品经理进阶课> 正式在CSDN学院上线

目录 课程目录 适用人群 课程介绍 课程地址 课程目录 001-产品经理进阶:开课介绍 002-产品经理进阶:产品经理简介 003-产品经理进阶:产品经理所需具备的核心素质 004-产品经理进阶:产品经理的进阶路径 005-产品经理进阶&a…

指定城市|眼科医生入世界名校斯坦福大学访学深造

J医生计划利用一年时间自费到美国进行访学交流。提出的要求是专业匹配,兼顾基础医学研究及眼科临床观摩,并且指定城市,希望在今年3、4月份出国。最终我们确定了世界名校斯坦福大学。邀请函上明示:访学期间除从事基础研究外&#x…

手把手教你学习PyQT5:打造精美、功能强大的桌面应用程序(更新中。。)

目录 前言一、PyQt5介绍&开发环境安装&简单案例分析1-1、PyQt5的介绍1-2、开发环境安装1-3、简单案例分析 二、QT Designer2-1、安装和配置2-2、QT Designer基础入门2-3、ui文件转换为python文件 三、PyQt5基本窗口控件(QMain Window、Qwidget、QDialog、Ql…

C# 利用ffmpeg的image2pipe参数实现USB摄系头本地预览同时推流

本地USB摄像头在使用中时,不支持另一个程序的并发访问,也就是所USB摄像头只能令第一个连接的程序“独享”。 在开发一个软件时,希望实现预览USB摄像头的同时,实现摄像头的推流。 推流要用的ffmpeg,经过资料查找&…

mac m2芯片 安装 brew 和cocoapods

Homebrew的安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 这里可能会失败,如 git clone 时候报错 error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly before end of the underlyi…

进程(二)

进程二 2.6 调度的概念、层次2.6.1 基本概念2.6.2 三个层次2.6.3 三层调度的联系、对比2.6.4 补充知识2.6.5 本小节总结 2.7 进程调度的时机、切换与过程、方式2.7.1 进程调度的时机2.7.2 切换与过程2.7.3 进程调度的方式2.7.4 总结 2.8 调度器/调度程序/闲逛线程2.9 调度算法的…

HTML5 + JavaScript绘柱状图

之前用HTML5 JavaScript绘柱状图,可以直观显示各类型产品或品牌的所占比例大小。详见: HTML5 JavaScript绘柱状图1 现在需要针对每年获得各类品牌数据进行对比,绘制柱状图会更直观。 首先我们定义二维数组aBrandType,存放品牌…

双指针的基本应用

一、环形链表 I 方法1:哈希表 struct hashTable {struct ListNode* key;UT_hash_handle hh; };struct hashTable* hashtable;struct hashTable* find(struct ListNode* ikey) {struct hashTable* tmp;HASH_FIND_PTR(hashtable, &ikey, tmp);return tmp; }void insert(struc…

页面一打开就有30个重复请求,优化方法

一、写在前面 上周测试同事给我提了个bug。他说在公司运营系统某个编辑页面中,一个post请求调用太多次了,想让我看看怎么回事。我刚听他讲这个事情时心里有点不屑一顾,觉得能有多少次啊,大惊小怪的。然而当我在测试环境中打开那个…

经典文献阅读之--A Lifelong Learning Approach to Mobile Robot Navigation(终生学习轨迹导航)

0. 简介 终生学习作为近年来比较火的一种深度学习方式,导航终身学习(LLfN)旨在解决标准导航问题的一种新变体,在该问题中,智能体在有限的内存预算下,通过学习提高在线经验或跨环境的导航性能。而最近有一篇文章《A Lifelong Lear…

Python数据分析实战【十四】:你知道python中有几种排序方法吗【文末源码地址】

文章目录 一、List.sort()排序案例一:按照列表中的元素进行排序案例二:按照销售额数据进行排列 二、sorted()排序案例一:sorted()对列表进行排序案例二:sorted()对字典进行排序案例三:sorted()对列表中的字典元素排序 …

[工具]Pytorch-lightning的使用

Pytorch-lightning的使用 Pytorch-lightning介绍Pytorch-lightning与Pytorch的区别Pytorch-lightning框架的优势Pytorch-lightning框架 重要资源 Pytorch-lightning介绍 这里介绍Pytorch_lighting框架. Pytorch-lightning与Pytorch的区别 Pytorch-lightning可以简单的看作是…

shiro反序列化[cve_2016_4437]

目录 什么是shiro? 漏洞原理 漏洞复现 修复方案 什么是shiro? Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 漏洞原理 Apache Shiro 1.2.4及以前版本…

D1. LuoTianyi and the Floating Islands (Easy Version)(树形dp)

Problem - D1 - Codeforces 这是问题的简化版本。唯一的区别在于在该版本中k≤min(n,3)。只有在两个版本的问题都解决后,才能进行黑客攻击。 琴音和漂浮的岛屿。 洛天依现在生活在一个有n个漂浮岛屿的世界里。这些漂浮岛屿由n−1个无向航线连接,任意两个…

【0基础学爬虫】爬虫基础之自动化工具 Pyppeteer 的使用

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…

Python学习之Image模块图片滤镜效果操作示例

前言 滤镜效果是图像处理中常用的一种技术,可以用来增强图像的视觉效果,实现不同的效果,比如增强对比度、饱和度、色彩等。滤镜效果可以帮助用户快速地调整图像的特性,从而使图像更加适合用户的需求。 Image模块对于图像处理的…

Hive SQL 中 map, reduce 的数据血缘分析

Hive SQL 中的有些 SQL 语句和传统关系型数据库中使用的 SQL 语句在语法和功能上都有非常大的差异。在数据血缘分析中对这些 Hive SQL 特有的 SQL 语法的支持,是马哈鱼数据血缘关系分析工具和一般数据血缘分析工具的一个重要区别,对这些特殊 SQL 语法的支…