设计模式(4)--对象行为(6)--备忘录

1. 意图

    在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

    这样以后可以将该对象恢复到原先保存的状态。

2. 三种角色

   原发器(Originator)、备忘录(Memento)、负责人(Caretaker)

3. 优点

   3.1 保持了封装边界。屏蔽了原发器的内部信息。

   3.2 简化了原发器。 

4. 缺点

    4.1 可能代价很高。

    当生成备忘录必须拷贝并存储大量信息时,或非常频繁地创建备忘录和恢复原发器状态。

    4.2 在一些语言中可能难于保证只有原发器可访问备忘录的状态。

    4.3 维护备忘录的潜在代价。可能产生大量的存储开销。

5. 相关模式

    5.1 命令模式可使用备忘录来为可撤销的操作维护状态。

    5.2 备忘录可用于迭代器存储状态。 

6. 代码示意(C++)
#pragma once
#include <iostream>
#include <string>
#include <vector>
using namespace std;class Mememto
{string m_state;
public:Mememto(const string& state) {m_state = state;}string GetState() {return m_state;}void SetState(const string& state) {m_state = state;}};class Originator
{string m_state;
public:Mememto* CreateMememto() {return new Mememto(m_state);}void SetMememto(Mememto* pMememto) {m_state = pMememto->GetState();}void SetState(const string& state) {m_state = state;}void ShowState() {cout << "state:" << m_state << endl;}
};class CareTaker
{Mememto* m_pMememto;
public:CareTaker(Mememto* pMememto) {m_pMememto = pMememto;}~CareTaker() {delete m_pMememto;}Mememto* GetMememto() {return m_pMememto;}
};
#include "Mememto.h"
int main() {Originator* pOriginator = new Originator();pOriginator->SetState("on");pOriginator->ShowState();CareTaker taker(pOriginator->CreateMememto());pOriginator->SetState("off");pOriginator->ShowState();pOriginator->SetMememto(taker.GetMememto());pOriginator->ShowState();delete pOriginator;return 0;
}

运行结果:

 

 6.1 Originator通过Mememto来保存真实的内部状态,不保留历史状态(3.2)。

 6.2 Caretaker持有有历史状态的Mememto指针,但不关注其内部状态(3.1)。

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

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

相关文章

31.Java程序设计-基于Springboot的鲜花商城系统的设计与实现

引言 背景介绍&#xff1a;鲜花商城系统的兴起和发展。研究目的&#xff1a;设计并实现一个基于Spring Boot的鲜花商城系统。论文结构概述。 文献综述 回顾相关鲜花商城系统的设计与实现。分析不同系统的优缺点。强调Spring Boot在系统设计中的优越性。 系统设计 需求分析 用户…

Docker自建私人云盘系统

Docker自建私人云盘系统。 有个人云盘需求的人&#xff0c;主要需求有这几类&#xff1a; 文件同步、分享需要。 照片、视频同步需要&#xff0c;尤其是全家人都是用的同步。 影视观看需要&#xff08;分为家庭内部、家庭外部&#xff09; 搭建个人网站/博客 云端OFFICE需…

猫冻干哪个牌子的口碑最好?业内人士分享这五款口碑好的猫冻干

很多新手铲屎官在为自家猫咪购买猫食品时&#xff0c;都会非常注重成分和安全性。养了这么多年的猫&#xff0c;可以说&#xff0c;他们购买过的猫食品数量一定比大多数人都要多。自从冻干猫粮流行起来之后&#xff0c;很多铲屎官都开始给自家的猫咪喂冻干。冻干不仅可以作为主…

C#高级 02异步编程

基础知识 1.什么是异步任务 包含了异步任务的各种状态的一个引用类型 1)正在运行、完成、结果、报错等 2)另有ValueTask值类型版本对于异步任务的抽象 1)开启异步任务后&#xff0c;当前线程并不会阻塞&#xff0c;而是可以去做其他事情 2)异步任务&#xff08;默认&#xff…

springboot返回vue id值变了

数据库里面存的616 到前端就变成了600了 后面大佬指导了下才知道是 mysql int类型太长解析不了 springboot用Long类型也不行&#xff0c; 换成String类型就可以了

21.仿简道云公式函数实战-数学函数-COS

1. COS函数 COS 函数可用于计算角度的余弦值&#xff0c;返回 -1 到 1 之间的数值。 2. 函数用法 COS(弧度) 3. 函数示例 如计算 COS(60) 的值&#xff0c;可设置公式为COS(RADIANS(60))&#xff0c;返回 0.5。 4. 代码实战 首先我们在function包下创建math包&#xff0…

Apipost-Helper使用流程

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…

码住!8个小众宝藏的开发者学习类网站

1、simplilearn simplilearn是全球排名第一的在线学习网站&#xff0c;它的课程由世界知名大学、顶级企业和领先的行业机构通过实时在线课程设计和提供&#xff0c;其中包括顶级行业从业者、广受欢迎的培训师和全球领导者。 2、VisuAlgo VisuAlgo是一个免费的在线学习算法和数…

03-JWT令牌和普通令牌的区别,JWT令牌的格式和生成

JWT令牌 普通令牌问题 普通令牌的问题: 以OAuth2的密码模式为例进行说明,客户端每次访问资源时, 资源服务都需要远程请求认证服务去校验令牌的合法性导致执行性能低 如果能够让资源服务自己校验令牌的合法性&#xff0c;这样就可以省去远程请求认证服务的成本并提高性能 常见…

SpringCloud(H版alibaba)框架开发教程---附源码 一

源码地址&#xff1a;https://gitee.com/jackXUYY/springboot-example 创建订单服务&#xff0c;支付服务&#xff0c;公共api服务&#xff08;共用的实体&#xff09;&#xff0c;eureka服务 1.cloud-consumer-order80 2.cloud-provider-payment8001 3.cloud-api-commons 4.…

国标标准和行业标准使用介绍

场景 我现在所在行业是交通行业&#xff0c;主要做城市交通信控相关的工作&#xff0c;后续可能会涉及高速、收费站、稽核收费等业务场景在做产品开发时&#xff0c;我们需要有一个标准可以参考&#xff0c;这些标准必须是公认的&#xff0c;这时就用到了 国家标准、行业标准等…

仓储革新:AR技术引领物流进入智慧时代

根据《2022年中国物流行业研究&#xff1a;深度探析行业现状&#xff08;智能设备及智能软件&#xff09;》&#xff0c;报告中提及&#xff1a;“中国社会物流总额依然保持着较为良好的增长态势&#xff0c;年增速已恢复至常年平均水平。2021年社会物流总额细分中工业物流总额…

有没有什么软件可以用来线上走审批流程的?

有没有什么软件可以用来线上走审批流程的&#xff1f; 这就不得不提一嘴我们简道云了——因为&#xff0c;用简道云来搭建审批流程是特别“省”的&#xff1a; 省沟通&#xff1a;不用费心费力跟外部开发者沟通需求&#xff0c;自己动手做一点试一点&#xff1b; 省时间&…

数据通信基础知识

消息和信息、信号和数据 消息和信息 通信是在源点与终点之间传递消息或者信息。 信息和消息有着不同的概念。 消息是指能向人们表达客观物质运动和主观思维活动的文字、符号、数据、语音和图像等。它有两个特点: 能被通信双方所理解可以相互传递。 信息是指包含在消息中对通…

JOSEF约瑟 双位置继电器 DCS-12/110V 线圈电压直流110V 板前安装

系列型号&#xff1a; DCS-11双位置继电器&#xff1b; DCS-12双位置继电器&#xff1b; DCS-13双位置继电器&#xff1b; RXMVB2 RK 251 204双位置继电器&#xff1b; RXMVB2 RK 251 205双位置继电器&#xff1b; RXMVB2 RK 251 106双位置继电器&#xff1b; 一、用途 …

本地缓存:Caffeine入门使用

概况 回顾互联网应用发展史&#xff0c;可以发现一个通用并且普遍存在的一个工作过程。如下图所示&#xff0c;用户从浏览器发出请求 -> 网络转发请求 -> 应用服务业务处理 -> 底层存储信息获取&#xff0c;然后逆向的返回用户&#xff0c;形成页面给予用户相应信息。…

[递归回溯枚举] 装载问题

装载问题 题目描述 有一批共 n 个集装箱要装上 2 艘载重量分别为 c1和 c2的轮船&#xff0c;其中集装箱 i 的重量为 wi&#xff0c;且 装载问题要求确定&#xff0c;是否有一个合理的装在方案可将这 n 个集装箱装上这 2 艘轮船。如果有&#xff0c;找出最优装载方案。 关于输…

【idea】运行工程时候卡了许久Java Method Breakpoints

老以为是数据库连接不上&#xff0c;此问题概率性小&#xff0c;操作上面不小心打了断点… 应该是打断点的时候&#xff0c;打到了方法上面&#xff0c;去掉哟 Java Method Breakpoints

文件过大放不了U盘?三个方法非常简单~

文件过大放不了U盘我们可以从文件过大这个角度来解决一下这个问题&#xff0c;可以借助一些工具把文件压缩后&#xff0c;体积变小后&#xff0c;再放入U盘&#xff0c;使得u盘得到高效的利用&#xff0c;下面是推荐的一些好用的软件。 一、嗨格式压缩大师 是一款可以压缩多种…

干货!一文详解车间管理的五大基本方法

车间管理是制造型企业生产过程中的重要环节&#xff0c;它直接影响着企业的生产效率、成本控制、产品质量以及员工的士气与工作效率。优秀的车间管理不仅能够提升产品的质量和生产力&#xff0c;还能降低运营成本&#xff0c;从而在激烈的市场竞争中为企业赢得优势。 为了帮助…