顾名思义,备忘录就是保存一个状态,到需要的时候可以恢复到某一时刻的状态。

一、UML类图


参与者说明

  1. Originator,需要保存状态的对象;
  2. Memento,备忘录对象,负责保存记录(即Originator的内部状态);
  3. Caretaker,守护者对象,负责保存多个备忘录,使用集合管理;

代码示例

备忘录

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

需要保存状态的类

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

备忘录管理类

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

客户类

public class Client {public static void main(String[] args) {Originator originator = new Originator();CareTaker careTaker = new CareTaker();originator.setState("state #1 --- attack value 100");careTaker.add(originator.saveStateToMemento());originator.setState("state #2 --- attack value 80");careTaker.add(originator.saveStateToMemento());originator.setState("state #3 --- attack value 50");careTaker.add(originator.saveStateToMemento());System.out.println("current state is: " + originator.getState());// back to state 1originator.getStateFromMemento(careTaker.get(0));System.out.println("current state is: " + originator.getState());}
}

测试结果

current state is: state #3 --- attack value 50
current state is: state #1 --- attack value 100Process finished with exit code 0

三、参考

  1. https://m.runoob.com/design-pattern/memento-pattern.html
  2. 韩顺平 《设计模式》

设计模式系列博文导航

一、创建型 - 5种

原型模式(Prototype Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
工厂模式(Factory Pattern)
单例模式(Singleton Pattern)

助记语:原抽建工单

二、结构型 - 8种

享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
适配器模式(Adapter Pattern)
外观模式(Facade Pattern)

过滤器模式(Filter/Criteria Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)

助记语:想呆室外,过桥组装

三、行为型 - 11种

责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
中介者模式(Mediator Pattern)
迭代器模式(Iterator Pattern)

观察者模式(Observer Pattern)
策略模式(Strategy Pattern)
状态模式(State Pattern)

备忘录模式(Memento Pattern)
模板方法模式(Template Pattern)
访问者模式(Visitor Pattern)

助记语:责令解中谍,观测状被模仿

每天一个设计模式之备忘录模式(Memento Pattern)相关推荐

  1. 二十四种设计模式:备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern) 介绍 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. 示例 有一个Message实体类 ...

  2. java memento_备忘录模式-Memento Pattern(Java实现)

    备忘录模式-Memento Pattern Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态. 本文中的场景: 有一款游戏可以随时存档, ...

  3. 保留状态的秘密 - 深入了解Java备忘录模式(Memento Pattern)

    文章目录 一.概述 1.1 介绍备忘录模式的定义和作用 二.角色 2.1 介绍备忘录模式中的三个角色 三.实现方法 3.1 介绍备忘录模式的实现方法 3.2 分别介绍基于类和基于接口实现备忘录模式的方 ...

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

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

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

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

  6. 『设计模式』备忘录模式(memento)下象棋,我就想悔棋怎么办

    23种设计模式+额外常用设计模式汇总 (持续更新) Memento模式的关键就是要在不破坏封装性的前提下,捕获一个对象的内部状态并在该对象之外保存这个状态.这样以后就可以利用该保存的状态实施恢复操作. ...

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

    前言:[模式总览]----------by xingoo 模式意图 这个模式主要是想通过一个对象来记录对象的某种状态,这样有利于在其他需要的场合进行恢复. 该模式还有跟多可以扩展的地方,比如可以记录多 ...

  8. 23.备忘录模式(Memento Pattern)

    using System; using System.Collections.Generic;namespace ConsoleApplication6 {/// <summary>/// ...

  9. 38备忘录模式(Memento Pattern)

    对象状态的回溯:     对象状态的变化无端,如何回溯/恢复对象在某个点的状态?                          动机:     在软件构建过程中,某些对象的状态在转换过程中,可能由 ...

最新文章

  1. maven 下载 源码和javadoc命令
  2. DeepMind提出新型神经网络架构,用无监督方法从视频中提取关键点 | 论文
  3. 儿童编程软件python-Python编程工具pycharm的使用
  4. Linux repo 文件学习;
  5. 什么是微调?什么是模型迁移?
  6. 笔记本暗屏维修多少钱_电视机维修|维修电视机多少钱?电视机黑屏
  7. SDUTOJ 【1166】打印直角三角形
  8. 使用邮件客户端整合日常信息
  9. 软件测试用例.范文,软件测试用例模板范文
  10. java 多线程课件_Thread_java多线程参考源码_ppt_大学课件预览_高等教育资讯网
  11. estore简版商城
  12. pyinstaller打包py遇到的问题
  13. hadoop集群:关于Could not obtain block:报错问题
  14. ARP缓存表过期问题
  15. ​从机械工程师到机器学习工程师,我也是个数据科学家了
  16. 湿化学清洗过程中晶片污染控制方法
  17. 短视频平台开发,将图片、视频保存到本地的相册中
  18. 具备听力保护作用耳机有哪些、不伤耳骨传导耳机排名
  19. 各种十进制转十六进制的方法
  20. 如何防止验证码接口被恶意攻击

热门文章

  1. 关于android 在黑屏情况下wifi下载速度慢的问题的解决。
  2. 这是一篇1==“1”?励志:缓解压力 的文字
  3. android fm信号强度,FM 收音机灵敏度测试方法
  4. Java类加载及对象创建过程详解
  5. java内部类写法_Java匿名内部类的写法示例
  6. Python爬虫——爬取Bing壁纸
  7. Axure RP9 中继器的简单操作(1)
  8. 【转】刘润:不要和没有逻辑的人讨论业务
  9. 【号外】疑似阿尔法狗回归,Master打遍世界顶尖棋手没输过
  10. JSP中动态添加或删除table的行