文章目录

  • 一、备忘录模式简介
  • 二、适应场景
  • 三、示例演示
  • 四、测试示例

拥有乐观的心态很重要,它能让工作和生活更加美好。

一、备忘录模式简介

备忘录模式是设计模式中行为型模式的一种。备忘录模式用于保存对象的状态,以便于在合适的时候恢复对象。

备忘录模式使用三个角色:Memento(备忘)、Originator(发起者)、Caretaker(备忘管理者)。

二、适应场景

  1. 需要保存/恢复数据的相关场景。
  2. 提供一个可回滚的操作。

例如:游戏存档、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)相关推荐

  1. 设计模式学习笔记——备忘录(Memento)模式

    设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...

  2. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  3. Net设计模式实例之备忘录模式(Memento Pattern)

    一.备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以就该对 ...

  4. 设计模式读书笔记-----备忘录模式

    个人比较喜欢玩单机游戏,什么仙剑.古剑.鬼泣.使命召唤.三国无双等等一系列的游戏我都玩过(现在期待凡人修仙传),对于这些游戏除了剧情好.场面大.爽快之外,还可以随时存档,等到下次想玩了又可以从刚开始的 ...

  5. [设计模式-行为型]备忘录模式(Memento)

    一句话 让某个对象可以取到之前的某个状态值. 概括 解析 MEMENTO-同时跟几个MM聊天时,一定要记清楚刚才跟MM说了些什么话,不然MM发现了会不高兴的哦,幸亏我有个备忘录,刚才与哪个MM说了什么 ...

  6. 设计模式学习笔记——外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  7. 设计模式学习笔记-原型模式

    一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...

  8. 设计模式学习笔记-状态模式

    引言 使用该设计模式的情况:如在场景中的主角甚至是敌人,有N个不同状态:走路,攻击,待机.....,游戏中,这些状态来回切换.有一个明确的状态划分的情况下,此时,是可以使用Switch...case. ...

  9. 设计模式学习笔记-中介模式

    概述:                                                                                                 ...

  10. 设计模式学习笔记——命令模式(Command)

    1.特点:将请求发送者与具体实现者解耦,可对请求排列.取消.重做,支持事务.(多请求,单处理) 2.概念:属于对象的行为模式[GOF95].命令模式又称为行动(Action)模式或交易(Transac ...

最新文章

  1. 计算机专业数控,数控专业的月薪是多少 数控专业能干什么
  2. 有没有python与机械结合的工作-用 Python 自动化办公,我与大神之间的差距一下就...
  3. 什么是SQL 注入?
  4. 配置单节点伪分布式Hadoop
  5. jQuery应用之(二)使用jQuery管理选择结果(荐)
  6. 编译性语言、解释性语言和脚本语言的区别
  7. python 异常分类_Python异常类型
  8. 设置NPM/Electron国内源
  9. 哈佛推出这款PyTorch工具包,10行代码训练“AI药神”模型
  10. Win10发布微码,修复Intel CPU内核数据泄漏新漏洞 (含视频)
  11. 针织布横条疵点解决方案
  12. JavaScript高级程序设计
  13. 计算机等级考试c语言 真题,计算机等级考试二级C语言真题
  14. 支付宝登陆泰国最大免税店King Power可扫码支付
  15. 计算机无法安装64位操作系统,细说64位电脑怎么安装32位系统
  16. 升降压斩波电路matlab,升降压斩波电路matlab仿真
  17. 该死!辛苦制作的PDF文档被人随意传播,甚至还被拿去卖钱?
  18. LeetCode(数据库)- Users That Actively Request Confirmation Messages
  19. 不再月光,从记账开始
  20. 五大经典算法(贪婪、动态规划、分治、回溯、分支限界法)及其联系和比较

热门文章

  1. 106划为c语言16进制数,计算机基础知识题(含答案)
  2. 深度学习经典应用——鸢尾花分类(基于sklearn包)+三维成果可视化
  3. linux vi 多行复制粘贴,vim 单行或者多行复制粘贴
  4. UTips校园资讯助手用户体验报告
  5. Neuron:背侧流中θ振荡的选择性夹带可提高听觉工作记忆表现
  6. Redis --图灵
  7. 【C++---const引用】数组进行指针引用传递给函数error: non-const lvalue reference of type ‘int*‘ to an rvalue
  8. lucky or not
  9. jenkin创建任务定时发邮件(window环境,linux类似)
  10. Win10 平台C#与低功耗蓝牙BLE设备通信案例