本地网站建设信息大全网站模板优势

news/2025/9/28 7:43:38/文章来源:
本地网站建设信息大全,网站模板优势,wordpress软件网站模板下载失败,潍坊网站建设方案备忘录模式#xff08;Memento Pattern#xff09;是一种行为型设计模式#xff0c;用于在不破坏封装性的前提下#xff0c;捕获并保存对象的内部状态#xff0c;以便在将来的某个时刻可以恢复到之前的状态。备忘录模式的核心是状态的保存和恢复#xff0c;常用于实现撤销…备忘录模式Memento Pattern是一种行为型设计模式用于在不破坏封装性的前提下捕获并保存对象的内部状态以便在将来的某个时刻可以恢复到之前的状态。备忘录模式的核心是状态的保存和恢复常用于实现撤销、回滚等功能。 备忘录模式的应用场景 备忘录模式特别适合以下场景 撤销/恢复操作例如文本编辑器中的撤销功能通过备忘录保存每次操作的状态用户可以随时回到某个历史状态。 数据快照保存对象在某个时刻的快照以便之后回溯或调试。 事务管理在处理复杂的事务时可以在中间点保存状态当某个操作失败时回滚到之前的状态。 备忘录模式的核心 备忘录模式的主要组成部分包括 发起者Originator负责创建并恢复备忘录保存当前的状态到备忘录中或者从备忘录中恢复状态。 备忘录Memento用于存储发起者的内部状态不对外公开备忘录的实现细节。 负责人Caretaker负责保存和管理备忘录但不会操作或修改备忘录的内容。它只知道备忘录保存的状态并在需要时将备忘录传递回发起者进行状态恢复。 备忘录模式强调的是封装性发起者的内部状态不应该对外暴露备忘录类也应该避免暴露这些细节。 备忘录模式的示例代码 假设我们在开发一个文本编辑器并希望提供撤销和恢复功能每当用户输入一段文本时我们将保存当前状态以便用户可以随时撤销操作。 1. 定义发起者、备忘录和负责人 #include QDebug #include QString #include QStack// 备忘录类保存文本编辑器的状态 class Memento { private:QString state; // 保存的状态public:Memento(const QString state) : state(state) {}QString getState() const {return state; // 返回保存的状态} };// 发起者类文本编辑器 class TextEditor { private:QString text; // 当前的文本状态public:void setText(const QString newText) {text newText;}QString getText() const {return text;}// 创建备忘录保存当前状态Memento* save() const {return new Memento(text);}// 从备忘录中恢复状态void restore(Memento* memento) {if (memento) {text memento-getState();}} };// 负责人类管理备忘录 class Caretaker { private:QStackMemento* history; // 保存备忘录的栈public:void saveMemento(Memento* memento) {history.push(memento); // 保存当前状态的备忘录}Memento* undo() {if (!history.isEmpty()) {Memento* lastState history.pop(); // 取出最后一个保存的备忘录return lastState;}return nullptr; // 没有更多历史状态}~Caretaker() {// 清理保存的备忘录while (!history.isEmpty()) {delete history.pop();}} };// 使用示例 int main() {TextEditor* editor new TextEditor();Caretaker* caretaker new Caretaker();// 初始文本editor-setText(Hello);qDebug() Current text: editor-getText(); // 输出Current text: Hello// 保存状态caretaker-saveMemento(editor-save());// 用户修改文本editor-setText(Hello, World);qDebug() Current text after modification: editor-getText(); // 输出Current text after modification: Hello, World// 再次保存状态caretaker-saveMemento(editor-save());// 用户再次修改文本editor-setText(Hello, Qt!);qDebug() Current text after second modification: editor-getText(); // 输出Current text after second modification: Hello, Qt!// 执行撤销操作editor-restore(caretaker-undo());qDebug() Current text after undo: editor-getText(); // 输出Current text after undo: Hello, World// 再次执行撤销操作editor-restore(caretaker-undo());qDebug() Current text after second undo: editor-getText(); // 输出Current text after second undo: Hello// 清理内存delete editor;delete caretaker;return 0; }代码解析 Memento类这是备忘录类负责保存发起者的状态。在这个例子中它保存文本编辑器中的文本状态并通过getState方法提供对状态的访问。 TextEditor类这是发起者类它拥有当前的文本状态并且可以创建备忘录来保存当前状态或从备忘录中恢复状态。 Caretaker类这是负责人类它保存所有的备忘录通过栈存储历史状态并在需要时将备忘录返回给发起者进行状态恢复。undo方法从栈中弹出最后保存的状态模拟撤销操作。 客户端代码客户端通过修改文本并在每次修改后保存状态。通过调用Caretaker的undo方法客户端可以恢复到之前的文本状态模拟撤销操作。 备忘录模式的优点 保存历史状态备忘录模式允许你保存对象的状态并在将来恢复这些状态。非常适合实现撤销、恢复、回滚等功能。 封装性好备忘录类不暴露发起者的内部状态保证了发起者的封装性。发起者和负责人只通过备忘录进行状态的保存和恢复而不需要直接操作发起者的状态。 减少耦合负责人只负责保存和管理备忘录而不直接参与发起者的逻辑职责清晰。 备忘录模式的缺点 内存开销大每次保存对象的状态都需要创建一个新的备忘录对象尤其是当对象状态非常庞大时可能会导致大量的内存占用。 实现复杂性如果对象的状态非常复杂备忘录模式的实现也会相应复杂尤其是在需要保存多个部分或大对象时。 适合使用备忘录模式的情况 需要实现撤销/恢复操作例如文本编辑器、绘图工具、IDE等支持撤销/恢复功能的应用程序。 需要保存对象的历史状态当系统需要定期保存某些对象的状态以便将来回溯时可以使用备忘录模式。 需要避免直接暴露内部状态如果需要在多个地方保存对象的状态但不想让外界直接访问或修改对象的内部状态备忘录模式是一个很好的选择。 不适合使用备忘录模式的情况 对象状态非常庞大如果发起者的状态非常庞大频繁创建备忘录会带来较大的内存开销不适合使用备忘录模式。 状态变化频繁如果对象状态变化频繁并且每次都需要保存那么备忘录模式会带来大量性能问题。 Qt中的备忘录模式应用 在Qt开发中备忘录模式可以用于实现撤销/恢复功能。例如在一个文本编辑器或绘图工具中用户的每次操作都可能改变对象的状态这些操作可以通过备忘录模式保存下来并在需要时回滚或恢复。Qt中有些类如QUndoStack可以直接实现类似的撤销功能它们内部也可能应用了备忘录模式的思想。 总结 备忘录模式通过保存对象的状态并在将来进行恢复使得系统能够实现撤销、回滚等功能同时保证了对象内部状态的封装性。它非常适合用于保存对象的历史状态、支持撤销操作的场景。然而备忘录模式的内存开销较大不适合频繁状态变化且状态庞大的对象。

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

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

相关文章

如何查看网站ftp地址视频广告联盟平台

前提:依旧以前面发的node.js服务器动态资源处理代码 具体见 http://t.csdnimg.cn/TSNW9为模板,在这基础上进行修改。与动态资源处理代码不同的是,这次的用户信息我们借用表单来实现。post请求解析来获取和展示用户表单填写信息 1》代码难点&…

google登录洛阳网站seo

目录 方案一:使用Samba共享服务Ubuntu 18 端配置Windows 10 端访问 方案二:使用 SSHFS(需在 Windows 上安装 SSH 客户端)Ubuntu 18 端配置Windows 10 端配置 方案三:使用 FTP 服务Ubuntu 18 端配置Windows 10 端访问 方…

网站备案编号推广公司的新产品英文

在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varch…

【前言】从重复劳动的奴隶到自动化大师

【前言】从重复劳动的奴隶到自动化大师如果你正在读这篇文章,我相信我们有一个共同的痛点:那些永远处理不完的重复性工作。 也许你和我一样,曾经在这些场景中挣扎过:每周一要手动整理几十个部门的报表,复制、粘贴…

网站开发毕业设计中期汇报表什么是网络营销?网络营销的常用方法有哪些?

1037 在霍格沃茨找零钱 (20 分) 如果你是哈利波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利…

想做网站制作运营注册什么公司核实使用asp.net做购物网站

在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,那么今天我们继续关于Docker 的精华问答。1Q:Consul是什么?A:Consul是一个分布式…

网站开发需求书打码兔怎么和网站做接口

二叉堆的介绍 二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:最大堆和最小堆。 最大堆:父结点的键值总是大于或等于任何一个子节点的键值; 最小堆:父结点的键值总是小于或等于任何一个子…

谷歌浏览器网页版入口手机版东莞网站seo推广

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 PDFMathTranslate是一个开源项目,旨在为用户提供便捷的PDF科学论文翻译解决方案。它不仅能够翻译文本,还能保留公式、图表、目…

代做机械设计的网站开发公司网签过期

Math中定义了许多的方法,通过Math类就能直接调用,均为static类型。 1、 调用形式:Math.方法名2、三角函数方法: static double sin(double a ) : 返回角的三角正弦static double cos(double a) : 返回角的三角余弦s…

copyright技术支持 东莞网站建设郑州同济医院收费高吗

zipkin 自定义采样率在第一篇文章的后续部分,这一次我们将编写一些更有用的自定义收集器:用于按给定的标准进行分组,采样输入,批量处理以及在固定大小的窗口上滑动。 分组(计数事件,直方图) 假…

电子商务和网站建设区别最新wordpress免费主题

简介 原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制已有对象来生成新的对象,而无需再次使用构造函数。 描述 原型模式通过复制现有对象来创建新的对象,而无需显式地调用构造函数或暴露对象的创建…

VS2022激活秘钥

今天提醒我试用期过了 ,于是在网上找了个秘钥: VHF9H-NXBBB-638P6-6JHCY-88JWH

NOIP2025模拟赛24

T1 T2 T3 T4\(\color{#52C41A} 普及+/提高\) \(\color{#3498DB} 提高+/省选-\) \(\color{#9D3DCF} 省选/NOI-\) \(\color{#0E1D69} NOI/NOI+\)参赛网址:https://oj.33dai.cn/d/TYOI/contest/689ad798c5d9c2f14c20b17f…

郑州中原区建设局网站柳江企业网站开发公司

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、内省是什么、实现方式: 内省(Introspector)是Java语言对Bean类属性、事件的一种缺省处理方法。…

亿诚建设项目管理有限公司网站四字母net做网站怎么样

数据架构的重要构件之一是数据模型,当然从数据架构的视角来说的数据模型是指企业级数据模型。本篇文章更多是讨论如何设计和管理数据模型,此处的数据模型是泛指在组织中通过数据建模的过程,来发现、分析和确定数据需求范围,并用于…

五屏网站建设代理商珠海网站建设电话

文章目录 电压源与电流源简介1.电压源的本质2.电流源的本质3.Q&A 推荐学习 电压源与电流源简介 1.电压源的本质 无论带什么样的负载,输出电压保持不变的电路才是电压源。 一个电路想要输出电压不变,那它必须有强有力的输出电流能力,而不…

grammar(?

随机重排函数,shuffle(begin(),end(),rnd / rand()); (mt19937 rnd(time(0))😉 scanf读入printf输出 long double 需要用 %Lf

外贸电子网站建设南京seo关键词优化服务

一、堆树的定义 堆树的定义如下: (1)堆树是一颗完全二叉树; (2)堆树中某个节点的值总是不大于或不小于其孩子节点的值; (3)堆树中每个节点的子树都是堆树。 当父节点的键…

免费招聘网站平台有哪些wordpress右侧空白

第二周作业:本周作业内容:1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。touch,rm,mv,cp,file,ls,chmod,chown,ln,rename,touch 修改文件atime,如果文件不存在,那么创建该文件。rm&#xff1…

网站 外包 版权网站域名价值查询

大模型日报 2024-05-05 大模型新闻: Techs new arms race: The billion-dollar battle to build AI - 小型专业化模型可以为各种细分应用提供关键的、高效的能力,这是AI行业必须要支持的。来源:VentureBeatGenerative AI on Agenda for Next CIECA Webin…