18、备忘录模式(Memento)

使用场景:

a) 需要保存/恢复数据相关状态场景。
b) 提供一个可回滚的操作

优点:

a) 给用户提供了一种可以恢复或回到特定历史状态的机制
b) 实现了信息的封装,使得用户不需要关心状态的保存细节

缺点:

资源消耗大。如果要保存的内部状态信息过多或者特别频繁,将会占用比较大的内存资源

模式结构:

a) 发起人角色(Originator):记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
b) 备忘录角色(Memento):负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
c) 管理者角色(Caretaker):对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。

#include "stdafx.h"
#include <iostream>
#include <string>using namespace std;
//备忘录
class Memento {private:string state;
public:Memento(string state) {this->state = state;}void setState(string state) {this->state = state;}string getState() {return state;}
};
//发起人
class Originator {private:string state;
public:void setState(string state) {this->state = state;}string getState() {return state;}Memento* createMemento() {return new Memento(state);}void restoreMemento(Memento *m) {this->setState(m->getState());}
};
//管理者
class Caretaker {private:Memento *memento;
public:void setMemento(Memento *m) {memento = m;}Memento *getMemento() {return memento;}
};int main()
{Originator *or = new Originator();Caretaker *cr = new Caretaker();or->setState("S0");cout << "初始状态:" + or->getState() << endl;cr->setMemento(or->createMemento()); //保存状态or->setState("S1");cout << "新的状态:" + or->getState() << endl;or->restoreMemento(cr->getMemento()); //恢复状态cout << "恢复状态:" + or->getState() << endl;
}

运行结果:

面向对象设计模式之备忘录模式相关推荐

  1. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

  2. 面向对象设计模式之策略模式

    面向对象设计模式之策略模式 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2.抽象鸭子类,鸭子飞行行为在此处类似于算法族 1 package ...

  3. java之备忘录模式,java设计模式之备忘录模式

    java设计模式之备忘录模式 代码无错便是优? 简介: 在不破坏封装性的前提下 , 捕获一个对象的内部状态,并在该对象之外保存这个状态 , 这样以后就可以将该对象恢复到原先保存的状态 . 备忘录模式就 ...

  4. Alamps学习设计模式之备忘录模式(笑话:劫个色OR抢个鸡蛋版)

    //设计模式之备忘录模式(月光宝盒版),只要喊菠萝菠萝蜜,就能返回事件的原点.//至尊宝//爱你一万年 class LoverWords {// 模拟Memento     private Strin ...

  5. 设计模式之备忘录模式 转载

    https://juejin.im/post/59c8eb6951882564c5164c5f 设计模式之备忘录模式 备忘录模式 介绍 是一种行为模式 用于保存对象当前状态,并在之后恢复到此状态(后悔 ...

  6. java备忘录模式 类图,Android编程设计模式之备忘录模式详解

    本文实例讲述了Android编程设计模式之备忘录模式.分享给大家供大家参考,具体如下: 一.介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时 ...

  7. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之备忘录模式

    · 备忘录模式在王者荣耀中的应用 · 一.简述 在王者荣耀的游戏中,贤者的庇护这件装备设计的初衷是提高容错率,常常出现在游戏后期,玩家通过装备贤者的庇护在危急时刻可以实现复活效果,进而保命. 二.备忘 ...

  8. 设计模式之备忘录模式(Memento)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  9. 设计模式笔记--备忘录模式

    常用设计模式有23中,分为: 创建型模式(主要用于创建对象) 1.单例模式    2.工厂方法模式    3.抽象工厂模式    4.建造者模式     5.原型模式  行为型模式 (主要用于描述对象 ...

最新文章

  1. 2022-2028年中国医养结合模式深度调研及投资前景预测报告
  2. 机器学习模型的超参数优化 | 原力计划
  3. OpenCASCADE绘制测试线束:数据交换命令之XDE 命令概览
  4. Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较
  5. 向量的内积,与角的关系,向量与它本身点积_4
  6. mysql版本更新之后忘记登录密码_MySQL 密码遗忘和登陆报错问题
  7. 某大型银行深化系统之十八:性能设计之三
  8. 大数据常见的处理方法有哪些
  9. opencv摄像头常用操作
  10. kei4的安装教程(附下载地址)
  11. 如何防止三分钟热度?给自己的目标定个阶段性奖励吧
  12. VMware Workstation 与 Device/Credential Guard 不兼容.在禁用 Device/Credenti
  13. 小白必看!DIY装机,电脑显示器选购
  14. RocketMQ事务消息学习及刨坑过程
  15. ios设备如何安装chatgpt
  16. max导出fbx动画模型导入unity后播放会出现局部模型扭曲解决办法总结
  17. win10电脑禁用开机自启动软件
  18. kivy中on_press,on_release事件用代码设置函数的问题
  19. 弱监督学习框架 Detectron2/DRN-WSOD-pytorch 在服务器/windows上配置安装及使用
  20. CAD—dwg格式解析库:libdxfrw和libredwg

热门文章

  1. 数据库关系模型不合理会带来什么问题?
  2. Vue实现百度下拉提示搜索
  3. 文献 | 从生物、医学和社会角度谈社恐
  4. ABS-WSK-HS WSK-HS温湿度控制器
  5. html图片中绝对定位,CSS中绝对定位
  6. 聊聊刘慈欣作品的风格
  7. Docker 学习实战路线
  8. AMA(Ask Me Anything)新型问答社区模式研究
  9. 独孤思维:自动裂变赚钱项目,新手小白每月轻松5000+
  10. 测度论与概率论笔记4:测度空间上的积分(上)