首页 > 其他分享 >备忘录模式(Memento)

备忘录模式(Memento)

时间:2023-12-25 14:56:49浏览次数:29  
标签:cout strWord OriginalWord 模式 备忘录 showWords Memento string

#include <iostream>
#include <string>
using namespace std;



class OriginalWord;
class Memento {
public:
    Memento(string strWord):m_strWord(strWord){}
private:
    friend class OriginalWord;
    string GetWords() {
        return m_strWord;
    }
    string m_strWord;
};

class OriginalWord {
public:
    OriginalWord(string myWord):m_strWord(myWord){}
    //存档
    Memento* saveWords() {
        return new Memento(m_strWord);
    }

    //恢复存档
    void recycleWords(Memento *pMemento) {
        m_strWord = pMemento->GetWords();
        cout << "存档恢复成功" << endl;
    }

    //输出文字
    void showWords() {
        cout << m_strWord << endl;
    }
private:
    string m_strWord;
};

//用来设置快照,获得快照
class Caretake {
public:
    void setMemento(Memento* pMem) {
        m_pMemento = pMem;
    }
    Memento* GetMemento() {
        return m_pMemento;
    }
private:
    Memento* m_pMemento;
};
int main() {
    OriginalWord *pWordFst = new OriginalWord("跟着老夏学开发");
    //第一条消息
    cout << "第一个msg" << endl;
    pWordFst->showWords();

    Caretake *pCT = new Caretake;
    pCT->setMemento(pWordFst->saveWords());
    //保存了当前Fst的快照
    cout << "保存了当前Fst的快照" << endl;
    OriginalWord *pWordSec = new OriginalWord("升值加薪就找他");
    cout << "第二个Msg" << endl;
    pWordSec->showWords();
    OriginalWord* pWordThd = new OriginalWord("丁老师好像也不错,");
    cout << "第三个Msg" << endl;
    pWordThd->showWords();
    cout << "我们是在多看看老夏和老丁的新课程,我还是想看看夏老师的新课程"<<endl;
    //当我们需要回溯到某一个状态的时候,我们需要问CareTake对象拿到的快照
    pWordFst->recycleWords(pCT->GetMemento());
    pWordFst->showWords();
    system("pause");
    return 0;
}
代码示例

 

标签:cout,strWord,OriginalWord,模式,备忘录,showWords,Memento,string
From: https://www.cnblogs.com/zeliangzhang/p/17926086.html

相关文章

  • Docker部署Redis7.X版本Cluster模式三主三从集群
    前言:最近给客户部署项目提供三台机器,需要用到redis就想着部署RedisCluster模式集群,但是找遍了csdn都没找到我想要的。花了好久参考了很多博主的帖子终于让我搞出来了,个人比较菜各位看官老爷见笑。话不多说开搞!!!!!!安装前准备:1.在三台机器上分别创建对应配置文件夹,一台机器两个节点(一......
  • java模式之-创建型模式
    typora-copy-images-to:uploadtypora-copy-images-to:upload一、设计模式的概述和分类二、单例模式1、介绍2、单例模式有八种方式:1)饿汉式(单线程推荐)2)懒汉式(线程不安全)3)双重检查(推荐)4、静态内部类(推荐)5、枚举6、注意事项三、工厂设计模式1、简单工厂模式2、工厂方法模式3、......
  • 设计模式七大原则
    一、设计模式的七大原则1、七大原则二、单一职责原则单一职责原则的注意事项三、接口隔离原则1、介绍四、依赖倒转原则1、介绍2、依赖关系传递的三种方式3、注意事项和细节五、里氏替换原则六、开闭原则1、介绍七、迪米特法则1、介绍2、注意事项八、合成复用原则设计核心1、七大原......
  • 轻量级用户模式线程
    Loom项目通过引入称为纤程的轻量级用户模式线程,在Java中引入了一种新颖的并发方法。与传统线程不同,纤维非常轻,并且可以大量生成,而不会产生相同的开销。这项创新旨在简化Java中的并发性,使开发人员更容易编写可扩展且高效的并发代码。纤维模型简单来说,纤程可以看作是在常规Ja......
  • 游戏编程模式 - 免费电子书
    请注意,这篇文章可能不含额外的原创内容,因为它用于留档特定的优质网站和个人笔记原网站标题:嘿,游戏开发者!您是否正在努力将代码组合成一个有凝聚力的整体?随着代码库的增长,您是否发现更改变得更加困难?感觉你的游戏是一个巨大的毛球,所有东西都与其他东西交织在一起?想知道设计模式是否以......
  • Odoo17_禁用从地址栏进debug模式
    1.参考odoo禁用debug模式_odoo14禁用debug-CSDN博客2.直接上代码#-*-coding:utf-8-*-fromodooimporthttpfromodoo.addons.web.controllersimporthomefromodoo.exceptionsimportUserErrorclassDebugHome(home.Home):@http.route('/web',type='ht......
  • 设计模式(十八)备忘录
    一、定义在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。备忘录模式是一种对象行为型模式,其别名为标记(Token)模式。二、描述备忘录模式的核心在于备忘录类以及用于管理备忘录的负责人类的设计,包含以下三个......
  • mysql集群模式分析
    集群的好处高可用性:故障检测及迁移,多节点备份。可伸缩性:新增数据库节点便利,方便扩容。负载均衡:切换某服务访问某节点,分摊单个节点的数据库压力。集群要考虑的风险网络分裂:群集还可能由于网络故障而拆分为多个部分,每部分内的节点相互连接,但各部分之间的节点失去连接。脑裂......
  • 策略模式进行发送短信
    业务场景​ 查询数据库的配置表,看配置进行选择不同公司的短信服务代码策略代码//策略接口publicinterfaceSmsSendStrategy{voidsendSms(Stringphone,Stringtemplate,Map<String,String>map);}//腾讯短信实现策略@ComponentpublicclassTencentSmsimpl......
  • 软件架构设计与模式之:数据库设计与数据访问模式
    1.背景介绍数据库设计和数据访问模式是软件架构和设计的核心领域之一。在现代软件系统中,数据库通常是系统的核心组件,负责存储和管理数据。数据访问模式则是一种设计模式,用于实现数据库操作的高效、可靠和可扩展的方式。在本文中,我们将讨论以下主题:背景介绍核心概念与联系核心算法原......