​ 今天洪爵想和大家一起学习备忘录模式

​ 设计模式分为三大种类,一种是创建型模式、另一种是结构性模式、最后一种是行为型模式。那么备忘录模式是属于哪一种呢?

​ 先简单的介绍下备忘录模式,故名意思,就是用来保存某些信息的,比如说保存某个对象的状态,在适当的时候进行恢复,既然加上了模式二字,那么它在设计上,肯定拥有着比较好的结构。

​ 在不破坏封装性的前提下,获取对象内部的状态,使用另外一个对象去保存该对象的状态,类的职责单一。

​ 备忘录模式有什么用呢?其实我们上网的过程中就经常能遇到,比如说浏览网页想回退到上一页,比如很多办公软件都有的撤销功能,上一步功能,电视剧中回退到上一台的功能,游戏中的存档,都是备忘录模式的具体实现。

​ 这种设计模式,提供给用户一种可以恢复状态的机制,使得用户可以较为方便的回到某个历史状态,并且用户不需要关心保存的细节。但也有相应的缺点,需要消耗资源如内存等来记住要保存的状态。

​ 当你的业务场景需要提供一个可回滚的操作,或者保存/恢复的能力,那么备忘录模式就很适合。

类图:

具体代码实现:

// 操作者
public class Originator {private String state;public String getState() {return state;}public void setState(String state) {this.state = state;}public Memento saveStateToMemento() {return new Memento(state);}public void setStateFromMemento(Memento memento) {state = memento.getState();}}// 每一个历史记录
public class Memento {private String state;public Memento(String state) {this.state = state;}public String getState() {return  state;}}// 备忘录
public class CareTaker {private List<Memento> mementoList = new ArrayList<>();public void add(Memento memento) {mementoList.add(memento);}public Memento get(int index) {return mementoList.get(index);}
}public class Client {public static void main(String[] args) {Originator originator = new Originator();CareTaker careTaker = new CareTaker();originator.setState("good");careTaker.add(originator.saveStateToMemento());originator.setState("well");careTaker.add(originator.saveStateToMemento());originator.setState("better");System.out.println("现在的状态 = " + originator.getState());System.out.println("上一个的状态 = " + careTaker.get(1).getState());System.out.println("上上个的状态 = " + careTaker.get(0).getState());System.out.println("------------------");System.out.println("恢复到上上个状态... ");originator.setStateFromMemento(careTaker.get(0));System.out.println("现在的状态 = " + originator.getState());}
}
/*
现在的状态 = better
上一个的状态 = well
上上个的状态 = good
------------------
恢复到上上个状态...
现在的状态 = good
*/

好啦,本期备忘录模式就到这里了,希望你能有所收获!

愿每个人都能带着怀疑的态度去阅读文章并探究其中原理。

道阻且长,往事作序,来日为章。

期待我们下一次相遇!

备忘录模式,徐长卿的三世记忆相关推荐

  1. 自考感悟,话谈备忘录模式

    引言:     2014年4月20号上午11:30,正式结束了自己的自学考试!考完之后瞬间感觉放松了开来!全身无力则是自己20号下午的唯一感受.放松了半天,今天回归正轨!又回到了和生活息息相关的设计模 ...

  2. 设计模式之备忘录模式(Memento)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. java备忘录模式应用场景_图解Java设计模式之备忘录模式

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

  4. 设计模式(行为型模式)——备忘录模式(Memento)

    2019独角兽企业重金招聘Python工程师标准>>> 本章讲讲第三类和第四类. 备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫 ...

  5. 《JAVA与模式》之备忘录模式

    备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一 ...

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

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

  7. 【设计模式】备忘录模式

    备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式. 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存 ...

  8. 备忘录模式(Memento)的原版与简化版实现

    备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 适用场景: 1.保存一个对象在某一个时刻的(部分) ...

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

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

最新文章

  1. Ubuntu怎么用c/c++编程
  2. gRPC源码分析(c++)
  3. 【CV】图像分析用 OpenCV 与 Skimage,哪一个更好?
  4. python中cv2库_Python cv2库(人脸检测)
  5. newcondition java_Java并发Condition接口
  6. html5标签兼容低版本浏览器
  7. 三星Galaxy S22 Ultra更多细节:采用Note系列外观因素
  8. 排名算法(三)--排序学习
  9. go程序员面试算法宝典 pdf_Kotlin程序员面试算法宝典 PDF 下载
  10. 《深入浅出统计学》总结
  11. 关于Excel常用函数做数据分析
  12. 华为2019校招笔试题之处理字符串(python版)
  13. 使用 Docker 搭建 FTP 服务并设置用户的指定目录上传,下载,删除
  14. 检测域名微信屏蔽,检测微信域名屏蔽API
  15. 计算机起源于发展论文,关于计算机起源及发展的论文
  16. [转载] linux程序后台挂起demo——nohup
  17. 使用Jquery、HTML、CSS、JS实现下拉菜单列表
  18. 人工智能基础之数学符号篇
  19. 数字人民币APP更新后 打不开/闪退 的解决方法
  20. 易百纳rv1126 201版本开箱

热门文章

  1. 计算机视觉技术英语论文,【毕业论文】外文翻译--计算机视觉技术在工业中的应用.doc...
  2. 《数据结构课程实践》_03_文本文件单词的检索与计数_准备工作
  3. mysql查询语句speed select
  4. Github每日精选(第56期):支持多语言的文字识别EasyOCR
  5. 用ps制作一张复仇者联盟海报
  6. (翻译)2016美国数学建模MCM D题 翻译:测量协会信息网络的演变和影响
  7. 作为一名新晋码农,以下是我个人的工作心得,希望能帮到刚步入编程殿堂和使用vue-cli和ant-design-vue UI组件库的童鞋们
  8. ibatis3 一个小bug
  9. 移动H5前端性能优化指南(转自ISUX)
  10. 隐式启动Activity以及Intent.resolveActivity的使用