设计模式学习笔记:备忘录模式(Memento)
文章目录
- 一、备忘录模式简介
- 二、适应场景
- 三、示例演示
- 四、测试示例
拥有乐观的心态很重要,它能让工作和生活更加美好。
一、备忘录模式简介
备忘录模式是设计模式中行为型模式的一种。备忘录模式用于保存对象的状态,以便于在合适的时候恢复对象。
备忘录模式使用三个角色:Memento(备忘)、Originator(发起者)、Caretaker(备忘管理者)。
二、适应场景
- 需要保存/恢复数据的相关场景。
- 提供一个可回滚的操作。
例如:游戏存档、windows 系统的 ctrl + z 、数据库的事务等。
三、示例演示
示例演示了广告牌保存历史修改状态,可以恢复历史广告内容。
Billboard(广告牌):
/*** 广告牌** @author ZhengNC* @date 2020/9/22 10:48*/
public class Billboard {/*** 广告牌内容*/private String content;public Billboard(String content){this.content = content;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}/*** 显示广告牌内容*/public void display(){System.out.println(content);}/*** 保存当前状态*/public BillboardMemento saveState(){return new BillboardMemento(content);}/*** 恢复之前保存的状态** @param memento*/public void recoverState(BillboardMemento memento){if (memento != null){this.content = memento.getContent();}else {System.out.println("没有历史记录");}}
}
BillboardMemento(广告牌备忘):
/*** 广告牌备忘** @author ZhengNC* @date 2020/9/22 11:00*/
public class BillboardMemento {private String content;public BillboardMemento(String content){this.content = content;}public String getContent(){return content;}
}
BillboardCaretaker(备忘录管理者):
import java.util.EmptyStackException;
import java.util.Stack;/*** 备忘录管理者** @author ZhengNC* @date 2020/9/22 11:03*/
public class BillboardCaretaker {private Stack<BillboardMemento> mementos = new Stack<>();public BillboardMemento get(){try {return mementos.pop();}catch (EmptyStackException e){return null;}}public void add(BillboardMemento memento){mementos.push(memento);}
}
四、测试示例
TestMemento(测试备忘录模式):
/*** 测试备忘录模式** @author ZhengNC* @date 2020/9/22 11:13*/
public class TestMemento {public static void main(String[] args) {//创建广告牌Billboard billboard = new Billboard("全场七折!");//显示广告内容billboard.display();//创建广告牌备忘录管理者BillboardCaretaker caretaker = new BillboardCaretaker();//保存广告牌当前状态caretaker.add(billboard.saveState());//修改广告内容billboard.setContent("全场六折!");//显示广告内容billboard.display();//保存广告牌当前状态caretaker.add(billboard.saveState());//修改广告内容billboard.setContent("全场一折!");//显示广告内容billboard.display();//恢复上一次修改的状态billboard.recoverState(caretaker.get());//显示广告内容billboard.display();//恢复上上一次修改的状态billboard.recoverState(caretaker.get());//显示广告内容billboard.display();}
}
输出结果:
全场七折!
全场六折!
全场一折!
全场六折!
全场七折!
设计模式学习笔记:备忘录模式(Memento)相关推荐
- 设计模式学习笔记——备忘录(Memento)模式
设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...
- 设计模式 - 学习笔记 - 工厂模式Factory Pattern
设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...
- Net设计模式实例之备忘录模式(Memento Pattern)
一.备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以就该对 ...
- 设计模式读书笔记-----备忘录模式
个人比较喜欢玩单机游戏,什么仙剑.古剑.鬼泣.使命召唤.三国无双等等一系列的游戏我都玩过(现在期待凡人修仙传),对于这些游戏除了剧情好.场面大.爽快之外,还可以随时存档,等到下次想玩了又可以从刚开始的 ...
- [设计模式-行为型]备忘录模式(Memento)
一句话 让某个对象可以取到之前的某个状态值. 概括 解析 MEMENTO-同时跟几个MM聊天时,一定要记清楚刚才跟MM说了些什么话,不然MM发现了会不高兴的哦,幸亏我有个备忘录,刚才与哪个MM说了什么 ...
- 设计模式学习笔记——外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...
- 设计模式学习笔记-原型模式
一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...
- 设计模式学习笔记-状态模式
引言 使用该设计模式的情况:如在场景中的主角甚至是敌人,有N个不同状态:走路,攻击,待机.....,游戏中,这些状态来回切换.有一个明确的状态划分的情况下,此时,是可以使用Switch...case. ...
- 设计模式学习笔记-中介模式
概述: ...
- 设计模式学习笔记——命令模式(Command)
1.特点:将请求发送者与具体实现者解耦,可对请求排列.取消.重做,支持事务.(多请求,单处理) 2.概念:属于对象的行为模式[GOF95].命令模式又称为行动(Action)模式或交易(Transac ...
最新文章
- 计算机专业数控,数控专业的月薪是多少 数控专业能干什么
- 有没有python与机械结合的工作-用 Python 自动化办公,我与大神之间的差距一下就...
- 什么是SQL 注入?
- 配置单节点伪分布式Hadoop
- jQuery应用之(二)使用jQuery管理选择结果(荐)
- 编译性语言、解释性语言和脚本语言的区别
- python 异常分类_Python异常类型
- 设置NPM/Electron国内源
- 哈佛推出这款PyTorch工具包,10行代码训练“AI药神”模型
- Win10发布微码,修复Intel CPU内核数据泄漏新漏洞 (含视频)
- 针织布横条疵点解决方案
- JavaScript高级程序设计
- 计算机等级考试c语言 真题,计算机等级考试二级C语言真题
- 支付宝登陆泰国最大免税店King Power可扫码支付
- 计算机无法安装64位操作系统,细说64位电脑怎么安装32位系统
- 升降压斩波电路matlab,升降压斩波电路matlab仿真
- 该死!辛苦制作的PDF文档被人随意传播,甚至还被拿去卖钱?
- LeetCode(数据库)- Users That Actively Request Confirmation Messages
- 不再月光,从记账开始
- 五大经典算法(贪婪、动态规划、分治、回溯、分支限界法)及其联系和比较
热门文章
- 106划为c语言16进制数,计算机基础知识题(含答案)
- 深度学习经典应用——鸢尾花分类(基于sklearn包)+三维成果可视化
- linux vi 多行复制粘贴,vim 单行或者多行复制粘贴
- UTips校园资讯助手用户体验报告
- Neuron:背侧流中θ振荡的选择性夹带可提高听觉工作记忆表现
- Redis --图灵
- 【C++---const引用】数组进行指针引用传递给函数error: non-const lvalue reference of type ‘int*‘ to an rvalue
- lucky or not
- jenkin创建任务定时发邮件(window环境,linux类似)
- Win10 平台C#与低功耗蓝牙BLE设备通信案例