备忘录模式(快照模式)

备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。

备忘录模式介绍

定义

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。

优点

  • 提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。
  • 实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。
  • 简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。

应用场景

备忘录模式结构与实现

结构

  • 发起人(Originator)角色
    记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
  • 备忘录(Memento)角色
    负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
  • 管理者(Caretaker)角色
    对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。

模板实现

  1. 发起人 通过 创建备忘录保存状态信息!
  2. 创建的备忘录对象由一个 管理者 来保存
  3. 发起人 通过调用 恢复快照 方法,从管理者中获取备忘录对象作为参数,恢复保存的数据状态!
package behaviour.memento.template;/*** 备忘录*/
class Memento {private String state;public Memento(String state) {this.state = state;}public void setState(String state) {this.state = state;}public String getState() {return state;}
}/*** 发起人*/
class Originator {private String state;public void setState(String state) {this.state = state;}public String getState() {return state;}public Memento createMemento() {return new Memento(state);}public void restoreMemento(Memento m) {this.setState(m.getState());}
}/*** 管理者*/
class Caretaker {private Memento memento;public void setMemento(Memento m) {memento = m;}public Memento getMemento() {return memento;}
}public class MementoTemplateClient {public static void main(String[] args) {// 创建 发起人Originator originator = new Originator();// 创建 管理者Caretaker caretaker = new Caretaker();// 设置 发起人的初试状态originator.setState("waiting");System.out.println("初始状态:" + originator.getState());// 管理者来管理备忘录-->保存指定发起者的状态(通过发起者创建一个状态的备忘录,存放在管理者中)caretaker.setMemento(originator.createMemento());// 修改 发起人 的状态originator.setState("running");System.out.println("新的状态:" + originator.getState());// 从管理者中获取保存的备忘录(内含之前的状态信息),恢复当前发起人之前保存的状态originator.restoreMemento(caretaker.getMemento());System.out.println("恢复状态:" + originator.getState());}
}

设计模式-备忘录模式(快照模式)相关推荐

  1. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento 沿着脚印,走过你来时的路,回到原点. 苦海翻起爱恨 在世间难逃避命运 相亲竟不可接近 或我应该相信是缘份 一首<一生所爱>触动了多少人的心弦,一段五百年都没有结 ...

  2. 备忘录模式 命令模式_备忘录设计模式示例

    备忘录模式 命令模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重 ...

  3. PHP设计模式——备忘录模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对 ...

  4. IOS设计模式-备忘录模式

    内容大纲 如何存储记录 备忘录模式的基本原理 使用备忘录模式 优化存储方案 恢复UIView的状态 1.如何存储记录 在存储记录时,第一步我们需要用一把钥匙去打开一把锁.第二步,当我们打开锁之后就会有 ...

  5. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  6. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

  7. java设计模式-备忘录模式

    备忘录模式详解 备忘录模式又叫作快照模式或Token模式,是一种对象的行为模式.在备忘录模式里,一个备忘录是一个对象,它存储另一个对象(原发器对象)在某个瞬间的内部状态.备忘的目的就是为了以后在需要的 ...

  8. Java设计模式——备忘录模式

    Java设计模式--备忘录模式 需求 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状 ...

  9. 设计模式-备忘录模式(Memento)-Java

    设计模式-备忘录模式(Memento)-Java 目录 文章目录 1.前言 2.示例案例-可悔棋的中国象棋 3.备忘录模式概述 3.1.备忘录模式定义 3.2.备忘录模式结构 3.3.备忘录模式结构图 ...

最新文章

  1. python 开发版-MicroPython的开发板
  2. 高清摄像头MIPI接口与ARM连接【转】
  3. 无数种求逆元的方法总结
  4. 安装系统显示sql服务器未安装,mssqlserver服务未安装怎么办 mssqlserver怎么安装
  5. 人脸关键点: DCNN-Deep Convolutional Network Cascade for Facial Point Detection
  6. Notepad++ 配置java编译环境
  7. 《JavaScript开发框架权威指南》——2.4 处理任务
  8. jsp项目实战--项目介绍
  9. 终极广告拦截者软件——AdGuard
  10. mysql事物幻读_MySQL事务的幻读
  11. 10款3D桌面推荐,很不错哦
  12. 在html里ff3d3d是什么颜色,HTML颜色参考
  13. Android 原生分享图片文字到微信
  14. 全自动爬虫,你爱了么
  15. python中如何放大字体
  16. SpringDataJPA+Hibernate框架源码剖析(六)@PersistenceContext和@Autowired注入EntityManager的区别
  17. tps5430手把手教学
  18. 直流电机的快衰减和慢衰减模式分析
  19. 【ReentrantLock】
  20. 科学家研发独特AI算法:用WiFi监测你是否在做梦

热门文章

  1. 大数据----Hive学习(6)----Hive 基本操作4
  2. 编程小伙不想做核酸,竟伪造绿码,警察蜀黍送上 5 日行拘套餐!
  3. 利用Amber热力学积分计算相对自由能变化
  4. MAX7219芯片 共阴LED驱动器 详细介绍
  5. 光纤收发器具体是怎么使用的?光纤收发器使用方法详解!
  6. 企业网络安全防护概述
  7. 刘润对话樊登:脑子里天天想着钱的人,干不出漂亮事儿
  8. 尼康d850相机参数测试软件,尼康(Nikon)D850 单机数码相机ISO感光度评测-ZOL中关村在线...
  9. 谷歌生物医学专用翻译_[Windows]学生党福利,文献翻译神器,附有生物医学专用引擎哦!...
  10. C#Winform中picturebox控件加载图片后无法释放