行为型(八) - 备忘录模式

news/2024/12/12 7:19:44/

一、概念

备忘录模式(Memento Pattern):也叫快照(Snapshot)模式,在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。通俗点就是用于保存某个对象的状态,以便在适当的时候恢复对象。简单的应用比如:游戏存档、浏览器中的后退、word中的撤销。

二、实现

这里举一个word中添加撤销的例子。
1、Word

public class Word {StringBuilder content = new StringBuilder();public String getContent() {return content.toString();}public void append(String input) {content.append(input);}public WordMemento createWordMemento() {return new WordMemento(content.toString());}public void restoreWordMemento(WordMemento wordMemento) {content.replace(0, content.length(), wordMemento.getContent());}
}

2、WordMemento表示word操作过程状态,该数据一旦创建不能留修改入口。

public class WordMemento {private String content;public WordMemento(String content) {this.content = content;}public String getContent() {return content;}
}

3、WordMementoHolder状态控制类

public class WordMementoHolder {private Stack<WordMemento> stack = new Stack<>();private static class WordMementoHolderSingleton {private static final WordMementoHolder INSTANCE = new WordMementoHolder();}public static WordMementoHolder getInstance() {return WordMementoHolderSingleton.INSTANCE;}public void pushWordMemento(WordMemento wordMemento) {stack.push(wordMemento);}public WordMemento popWordMemento() {return stack.pop();}public WordMemento getStackTopMemento(){return stack.peek();}
}

4、测试类

public class Client {public static void main(String[] args) {WordMementoHolder wordMementoHolder = WordMementoHolder.getInstance();Word word = new Word();String str1 = "hello";String str2 = "123";String str3 = "java";//添加第一个word.append(str1);wordMementoHolder.pushWordMemento(word.createWordMemento());System.out.println(word.getContent());//添加第二个word.append(str2);wordMementoHolder.pushWordMemento(word.createWordMemento());System.out.println(word.getContent());//添加第三个word.append(str3);wordMementoHolder.pushWordMemento(word.createWordMemento());System.out.println(word.getContent());//撤销第三个wordMementoHolder.popWordMemento();word.restoreWordMemento(wordMementoHolder.getStackTopMemento());System.out.println(word.getContent());}
}

5、运行结果
备忘录模式结果.png


http://www.ppmy.cn/news/1053930.html

相关文章

小白带你学习linux的shell脚本基础(三十五)

目录 一、概述 1、脚本就是将手动一次性执行的命令进行规范且自动化 2、学习路径 2.1表达式 2.2语句 2.3函数 2.4正则表达式 2.5文件操作四剑客 二、表达式 1、shell 2、表达式 2、1 变量 2、2 运算符 2、3shell脚本编写规范 2、4shell运行规则 2、5shell脚本运…

生信豆芽菜-缺氧评分的计算

网址&#xff1a;http://www.sxdyc.com/gradeHypoxia 1、数据准备 表达谱数据&#xff0c;行为基因&#xff0c;列为样本 2、提交后&#xff0c;等待运行成功即可下载 当然&#xff0c;如果不清楚数据是什么样的&#xff0c;可以选择下载我们的示例数据&#xff0c;也可以…

Nginx 无法转发本地端口

问题描述 本文主要分析解决 centos 下 nginx 配置端口转发后不生效&#xff0c;通过 nginx 配置 server 转发后&#xff0c;无法达到预期的转发目的&#xff0c;并出现502错误的问题。假设虚拟机 ip 为 192.168.0.8&#xff0c;并且在虚拟机内部署一个了 golang 服务&#xff…

英飞凌 Tc3xx AURIX 2G多核处理器简介

目录 1、概述 2、AURIX 2G多核架构 2.1、多核简介 2.2、片上总线简介 3、AURIX 2G内核简介 3.1、内核架构 3.2、内核寄存器 3.3、中断处理 4、AURIX 2G内存简介 4.1、内存简介 4.2、内存映射 1、概述 该产品具备多达六核的高性能架构,每个内核的时钟频率最高可达 30…

亿邦智库《2023数字化采购发展报告》解读,企企通推动企业采购数字化及供应链协同智能化发展

采购成本是企业成本控制的主体和核心。在当前供应链的背景下&#xff0c;采购数字化一方面可以通过提高效率来降低成本&#xff0c;增强合作和风险缓解能力&#xff1b;另一方面&#xff0c;信息、物流和资本流动的整合和重建将提高供应链的灵活性和灵活性&#xff0c;增强面向…

【数据库】连接查询

1 内连接查询 select 学员信息表.* 学员成绩表.* from 学员信息表 inner join 学员成绩表 on 学员信息表,学号 学员成绩表.学号; 2 左连接查询 select 学员信息表.*,学员成绩表.* from 学员信息表 left join 学员成绩表 on 学员信息表,学号 学员成绩表,学号&#xff1b; 3 右…

Idea配置Remote Host

一、打开RemoteHost窗口 双击shift打开全局搜索 搜索Tools→Deployment→Browse Remote Host或 idea项目顶部Tools→Deployment→Browse Remote Host 二、添加服务 右侧边栏打开RemoteHost&#xff0c;点击三个点&#xff0c;起个名字&#xff0c;选择type为SFTP&#xff…

ahooks.js:一款强大的React Hooks库及其API使用教程(五)

一、ahooks.js简介二、ahooks.js安装三、继续ahooks.js API的介绍与使用教程61. useEventTarget62. useExternal63. useFavicon64. useMutationObserver65. useLongPress66. useScroll67. useResponsive68. useFocusWithin69. useControllableValue70. useEventEmitter 一、aho…