Memento(备忘录)

一、意图

在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。

二、结构

此模式的结构图如图7-43所示。

其中:
• Memento (备忘录)存储原发器对象的内部状态,原发器根据需要决定备忘录存储原发器的哪些内部状态:防止原发器以外的其他对象访问备忘录。
• Originator (原发器)创建一个备忘录,用于记录当前时刻它的内部状态;使用备忘录恢复内部状态。
• Caretaker (管理者)负责保存好备忘录;不能对备忘录的内容进行操作或检査。

三、适用性

Memento模式适用于:
• 必须保存一个对象在某一个时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态。
• 如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

四、实现

备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。
MementoPattern,我们的演示类使用 CareTaker 和 Originator 对象来显示对象的状态恢复。


首先创建 Memento 类

class Memento {private String state;  public Memento(String state){this.state = state;}  public String getState(){return state;}
}

然后创建 Originator 类

class Originator {private String state;public void setState(String state){this.state = state;}public String getState(){return state;}public Memento saveStateToMemento(){return new Memento(state);}public void getStateFromMemento(Memento memento){state = memento.getState();}
}

其次 创建 CareTaker 类

class CareTaker {private List<Memento> mementoList = new ArrayList<Memento>();public void add(Memento memento){mementoList.add(memento);}public Memento get(int index){return mementoList.get(index);}
}

最后 使用 CareTaker 和 Originator 对象

public class MementoPattern {public static void main(String[] args) {// TODO Auto-generated method stubOriginator originator = new Originator();CareTaker careTaker = new CareTaker();originator.setState("State #1");originator.setState("State #2");careTaker.add(originator.saveStateToMemento());originator.setState("State #3");careTaker.add(originator.saveStateToMemento());originator.setState("State #4");    System.out.println("Current State: " + originator.getState());    originator.getStateFromMemento(careTaker.get(0));System.out.println("First saved State: " + originator.getState());originator.getStateFromMemento(careTaker.get(1));System.out.println("Second saved State: " + originator.getState());}}

运行结果:

设计模式之备忘录模式(Java实现)相关推荐

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

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

  2. java之备忘录模式,java设计模式之备忘录模式

    java设计模式之备忘录模式 代码无错便是优? 简介: 在不破坏封装性的前提下 , 捕获一个对象的内部状态,并在该对象之外保存这个状态 , 这样以后就可以将该对象恢复到原先保存的状态 . 备忘录模式就 ...

  3. java实现备忘录模式_设计模式之第17章-备忘录模式(Java实现)

    设计模式之第17章-备忘录模式(Java实现) 好男人就是我,我就是曾小贤.最近陈赫和张子萱事件闹得那是一个沸沸扬扬.想想曾经每年都有爱情公寓陪伴的我现如今过年没有了爱情公寓总是感觉缺少点什么.不知道 ...

  4. java备忘录模式 类图,Android编程设计模式之备忘录模式详解

    本文实例讲述了Android编程设计模式之备忘录模式.分享给大家供大家参考,具体如下: 一.介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时 ...

  5. 设计模式--责任链模式--Java实现

    设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...

  6. Alamps学习设计模式之备忘录模式(笑话:劫个色OR抢个鸡蛋版)

    //设计模式之备忘录模式(月光宝盒版),只要喊菠萝菠萝蜜,就能返回事件的原点.//至尊宝//爱你一万年 class LoverWords {// 模拟Memento     private Strin ...

  7. 设计模式之备忘录模式 转载

    https://juejin.im/post/59c8eb6951882564c5164c5f 设计模式之备忘录模式 备忘录模式 介绍 是一种行为模式 用于保存对象当前状态,并在之后恢复到此状态(后悔 ...

  8. [转]深入浅出Java设计模式之备忘录模式

    本文转自:http://dev.yesky.com/450/2070450.shtml 一.引子 俗话说:世上难买后悔药.所以凡事讲究个"三思而后行",但总常见有人做"痛 ...

  9. JAVA设计模式之备忘录模式

    文章目录 一.备忘录模式简介 二.备忘录模式的结构 三.备忘录模式的角色与职责 四.备忘录模式的具体实现 五.备忘录模式的优缺点 要抱抱才会开心啊~~~~~~~~~~~~ 一.备忘录模式简介 Meme ...

  10. java备忘录模式 类图,【java设计模式】备忘录模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述备忘录(Memento)模式的: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. 备忘录 ...

最新文章

  1. python去噪算法
  2. Ubuntu安装wps Linux版
  3. ospf 环回口的路由条目_OSPF的LSA类型
  4. 八十八、Python | 十大排序算法系列(下篇)
  5. OpenvSwitch VxLAN实验
  6. 软件工程趣盒软件设计
  7. leetcode刷题:相交链表
  8. Python从list删除元素
  9. [bug解决] IndentationError unindent does not match any outer indentation level
  10. Python中的变量、引用、拷贝和作用域
  11. Spring源码之动态AOP自定义标签
  12. matlab入门——矩阵运算
  13. 用plsql将excel导入oracle,使用工具 plsqldev将Excel导入Oracle数据库
  14. 小白 白嫖7天百度云网盘会员,高速下载
  15. 计算机工业设计id,我所认识的工业设计(ID)
  16. 在线考试小程序版手机微信考试软件,微信小程序考试系统出考试题小程序,考试答题微信小程序
  17. MLY -- 13.Error analysis:look at dev set examples to evaluate ideas
  18. 数据库的三级模式结构和两级映像
  19. 养蛙火爆,大数据解读《旅行青蛙》崛起之谜
  20. 数据库基本知识(MySql版)

热门文章

  1. 智能玩具市场巨大,WowWee品牌即将进入中国
  2. 深度学习的实时背景虚化
  3. 【HDU 5542】The Battle of Chibi (dp,树状数组优化)
  4. java战神_如何评价 《战神 God of War》(战神 4)?
  5. node crawler简单使用
  6. java人工智能语言_5种人工智能编程语言!Java依然屹立不倒
  7. 2017 robotart x86_robotart
  8. 【Jupyter Notebook的简单入门使用】
  9. signature=1e781a1658e368bb25d0be29823d232e,Aspects源码解析
  10. 模糊控制应用(一)模糊PID在一个三阶系统上的应用