设计模式(十九) 备忘录模式

2023-11-01

备忘录模式是一种行为型模式,作用是将对象的内部状态保存下来,在必要的时候恢复。备忘录模式可以用于游戏存档恢复、文件的历史记录等场合。

下面是一个简单的代码例子。首先是文档管理器,用于保存文档的状态。


public class DocumentManager {
    private Map<Integer, String> map = new HashMap<>();

    public void saveDocument(int id, String content) {
        map.put(id, content);
    }

    public String loadDocument(int id) {
        return map.get(id);
    }

}

然后是文档类,它利用文档管理器来保存文档的状态,并在必要的时候恢复到上个状态。

public class Document {
    private String content;
    private DocumentManager documentManager = new DocumentManager();
    private int editCount = 0;
    private int autosaveId = 0;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
        editCount++;
    }

    public Document(String content) {

        this.content = content;
    }

    public void save(int id) {
        documentManager.saveDocument(id, content);
    }

    public void autosave() {
        autosaveId = editCount;
        documentManager.saveDocument(editCount, content);
    }

    public void load(int id) {
        content = documentManager.loadDocument(id);
    }


    public void autoload() {
        content = documentManager.loadDocument(autosaveId);
    }

}

我们可以看到,在修改了文档内容之后,只要重新加载,就可以返回文档的上一个状态。

    public void run() {
        Document document = new Document("content");
        document.setContent("content1");
        document.autosave();

        document.setContent("content2");
        document.autoload();
        System.out.println("上次结果:" + document.getContent());
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式(十九) 备忘录模式 的相关文章

随机推荐

  • NTU_RGB+D数据集介绍及骨架数据可视化

    目录 1 NTU RGB D数据集 1 1 NTU RGB D数据集下载 1 2 NTU RGB D数据集介绍 2 骨架数据可视化代码 3 参考 1 NTU RGB D数据集 1 1 NTU RGB D数据集下载 NTU RGB D数据集论
  • 将句子反输java_java字符串反转,逆序输出(句子反转,单词不反转)

    如果输入 My name is Xiaogang 输出 Xiaogang is name My 代码具有去句子前后空格功能 并且有注释 class String2Test public static void main String arg
  • window.open()参数传递及获取

    1 最基本的弹出窗口代码 window open page html 2 经过设置后的弹出窗口 window open page html newwindow height 100 width 400 top 0 left 0 toolba
  • ⚠⚠项目时遇到的新函数新问题小记xX

    1 gethostname 返回本地主机的标准主机名 原型如下 include
  • OpenCV-对比度增强(伽马变换)

    https blog csdn net weixin 45645281 article details 105005009 伽马变换的实质就是对每一个像素进行幂函数操作 C include
  • 业界都有哪些数据库监控工具

    本文主要介绍下数据库监控工具 业界有很多数据库监控工具 以下是一些常见的数据库监控工具及其使用的公司 Zabbix 一款开源的企业级分布式监控解决方案 支持对MySQL Redis MongoDB等多种数据库的监控 使用的公司包括 IBM
  • 【图像处理】RGB、YUV (YCbCr) 图像表示详解

    RGB RGB图像表示是我们最常见的一种图像表示方式 这个非常好理解 三原色可以构成所有颜色 因此通过R G B三个通道的组合 就可以构成一张色彩丰富的图片 下面这张图可以直观感受一下RGB图像表示 从原点到最大值点的连线 就是我们熟知的灰
  • Jenkins连接gitlab提示returned status code 128解决办法

    Docker入门视频教程 Docker从入门到进阶 学习视频教程 腾讯课堂 个人博客纯净版 Jenkins连接gitlab提示returned status code 128解决办法 代码搬运工 在项目中配置git仓库地址 报无权限 Fai
  • 随机生成昵称工具类

    public class NicknameUtil public static final String FIRST NiCK NAME 墨 云 寒 慕容 欧阳 岳 南宫 郝连 司徒 独孤 王 皇甫 公羊 百里
  • Python中的负数取余问题

    12 5 12 5 output 2 3 在数学里 负数取余 遵循的是 如果 a 与 d 是整数 d 非零 那么余数 r 满足 a q d r q 为整数 且 0 lt r lt d 由此可见 我们的被除数 a 12 我们的商 d 5 那么
  • 快速理解ES6的解构赋值?

    function arr return 苹果 茶 蛋糕 我们将上述数组中的值依次赋值给三个变量 并在后续的程序中输出 传统的实现方法 var testArr arr var fruit testArr 0 tea testArr 1 cak
  • java无法解析符号什么意思,Intellij:无法解析符号'springframework'

    我试图用Spring开始我的第一个项目 我使用intellij的想法 我也很新 但无论如何 我跟着在jetbrain网站上写下的步骤 我不知道我做错了什么 但是我在第一个到默认创建的文件上有很多错误 Intellij 无法解析符号 spri
  • SpringSecurity+Oauth2+JWT

    SpringSecurity Oauth2 JWT SpringSecurity Oauth2 JWT 快速入门 自定义登入 自定义登入成功失败处理器 权限判断 自定义异常返回 自定义方法实现权限控制 注解实现权限控制 记住我实现 退出登入
  • WIN7搜索不到共享打印机怎么办? 亲测成功

    1 开启的服务 右键点击 计算机 右键菜单中选择 管理 找到 服务和应用程序 打开 服务 或者用WIN R打开 运行 对话框 输入services msc 按回车键打开 服务 然后 将以下服务的 启动类型 选为 自动 并确保 服务状态 为
  • 【数据库技术】NineData数据复制,加速实时数仓构建

    8 月 30 日 由 NineData 和 SelectDB 共同举办的主题为 实时数据驱动 引领企业智能化数据管理 的线上联合发布会 圆满成功举办 双方聚焦于实时数据仓库技术和数据开发能力 展示如何通过强大的生态开发兼容性 对接丰富的大数
  • mysql输入密码后闪退问题的解决

    1 找到配置文件my ini 然后用记事本将其打开 2 打开后 搜索mysqld关键字 找到后 在mysqld下面添加skip grant tables 保存退出 若提示不让保存时 可以将文件剪切到桌面 更改保存后再复制到mySQL目录下
  • 安装opencv和opencv-contrib库

    快速安装的方法在最后 速度超快 1 安装opencv python Win R 输入cmd 然后输入activate 进入base环境 或者其他自己创建的环境 输入 pip install opencv python 如果报错 显示的是拒绝
  • 正则表达式之ip地址匹配(详细讲解)

    正则表达式之ip地址匹配 一 正则匹配基本知识及概念 二 ip地址匹配 一 正则匹配基本知识及概念 在练习之前 需要大家知道一些基本知识 如果有一定基础的可以跳过该步骤 直接往下看 正则表达式 字符类 abc 代表a或者b 或者c字符中的一
  • lambda函数

    lambda函数也叫匿名函数 就是没有函数名的函数 lambda表达式基于数学中的 演算得名 直接对应于其中的lambda抽象 lambda函数的语法只包含一个语句 lambda arg1 arg2 argn expression 冒号前面
  • 设计模式(十九) 备忘录模式

    备忘录模式是一种行为型模式 作用是将对象的内部状态保存下来 在必要的时候恢复 备忘录模式可以用于游戏存档恢复 文件的历史记录等场合 下面是一个简单的代码例子 首先是文档管理器 用于保存文档的状态 public class DocumentM