1.定义

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

通俗来讲,备忘录模式就是一个对象的备份模式,提供一种程序数据的备份方法。

2.备忘录模式UML图

备忘录模式UML图

角色介绍

Originator 发起人角色,记录当前时刻的内部状态,负责创建和恢复备忘录记录的数据。

Memento 备忘录角色,负责储存发起人角色的内部角色,在需要的时候提供发起人需要的内部状态

Caretaker 备忘录管理员角色,对备忘录进行管理的角色。

3.简单实现

3.1发起人角色

public class Originator {

private String state;

public String getState() {

return state;

}

public void setState(String state) {

this.state = state;

}

public Memento createMemento(){

return new Memento(this.state);

}

public void restoreMemento(Memento memento){

setState(memento.getState());

}

}

3.2 备忘录角色

public class Memento {

private String state;

public Memento(String state) {

this.state = state;

}

public String getState() {

return state;

}

public void setState(String state) {

this.state = state;

}

}

3.3备忘录管理者

public class Caretaker {

private Memento memento;

public Memento getMemento() {

return memento;

}

public void setMemento(Memento memento) {

this.memento = memento;

}

}

3.4客户端调用

public class MyClass {

public static void main(String args[]) {

Originator originator=new Originator();

originator.setState("111");

/**

* 保存当前状态

*/

Memento memento=originator.createMemento();

Caretaker caretaker=new Caretaker();

caretaker.setMemento(memento);

/**

* 修改状态

*/

originator.setState("222");

System.out.println("发起人的当前状态为"+originator.getState());

/**

* 恢复之前保存的状态

*/

originator.restoreMemento(caretaker.getMemento());

System.out.println("发起人的当前状态为"+originator.getState());

}

}

打印结果为

发起人的当前状态为222

发起人的当前状态为111

这只是个最简单的例子,有时使用的时候还是有很多扩展的,比如多状态呀,结合原型模式呀,多备份的备忘录等。

4.总结

优点

可以进行数据的存储进行回滚操作

使用场景

需要保存和恢复数据的相关状态场景。

需要监控的副本场景中。

注意事项

备忘录的生命周期

备忘录的性能,不要再频繁建立备份的场景中使用,需要考虑性能问题。

android加密备忘录开发,Android设计模式-备忘录模式相关推荐

  1. 拼图android程序,可视化开发Android应用程序:拼图开发模式App Inventor

    可视化开发Android应用程序:拼图开发模式App Inventor 作 者:王向辉 等编著 出版时间:2013 内容简介 <可视化开发Android应用程序:拼图开发模式App Invent ...

  2. 分享篇 - 58同城基于Android APP Bundle开发的全新编译模式(编译速度提升70%)

    目录 1. Wafers 项目背景 2. 效果展示 3. 实现方案 4. 改造期间遇到的问题 5. 如何接入使用 6. 对比 Instant Run 和 Apply Changes 7. 总结 1. ...

  3. Android加密工具类,Android AES加密工具类分享

    1.AES加密工具类 java不支持PKCS7Padding,只支持PKCS5Padding.我们知道加密算法由算法+模式+填充组成,下一篇介绍iOS和Android通用的AES加密,本篇文章使用PK ...

  4. android光度传感器开发,Android开发之光线传感器用法

    释放双眼,带上耳机,听听看~! 获得感应器服务 Android开发中要使用光线传感器,需要先获得系统传感器服务Context.SENSOR_SERVICE,获得方法如下: SensorManager ...

  5. android 汽车gps开发,Android GPS定位开发教程

    要获取精确的位置服务信息需要 GPS 硬件的支持.在应用程序开发阶段,由于模拟器中并没有真正的 GPS 硬件,因此不能获得真实的 GPS 信息.但是可以使用 Eclipse 视图模式的 DDMS 模式 ...

  6. android加密技术框架,Android平台下文件透明加密技术的研究与实现

    摘要: 移动互联网的迅速发展使得手机应用不断丰富,智能手机的快速兴起为现代人们的生活带来了全新的体验.然而,人们在尽情享受这些全新体验的同时也在面临着日益突出的手机数据安全问题.目前,市场上已经出现了 ...

  7. [Android]使用Kotlin开发Android(二)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4829007.html [TOC] 使用Kotlin+OkHtt ...

  8. 【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )

    文章目录 一.Android 平台运行的 cmd 程序类型 二.Android 平台运行的 cmd 程序编译选项 三.编译 Android 平台的 cmd 可执行程序 一.Android 平台运行的 ...

  9. html开发android,使用HTML5开发Android本地应用(一)

    HTML5是现在最热门的技术之一,Android自带的WebKit浏览器对于HTML5有着不错的支持,而各种浏览器的最新版本都开始普遍的支持HTML5.使用HTML5开发手机应用的主要好处有两个:一个 ...

最新文章

  1. [总结篇4] l2-agent的细节
  2. PotPlayer 所有版本合集
  3. ORA-01031 权限不足-过程中DBA 角色用户无法执行DDL
  4. 获取需要登陆才能被访问的页面,HttpClient(扩展HttpWebRequest)来实现
  5. 绕过网关访问图片上传并解决跨域问题
  6. 中怎样载入选区_PS----关于选区的选取
  7. httppostedfilebase.saveas后文件被占用_文件过多时ls命令为什么会卡住?
  8. ClickOnce Cannot download the application解决方法
  9. L1-045 宇宙无敌大招呼-PAT团体程序设计天梯赛GPLT
  10. php pdo $_GET,PHP PDOStatement::getColumnMeta讲解
  11. [数据仓库]我理解的数据中台
  12. 【敏捷开发每日一贴】测试驱动开发
  13. Java使用POI实现多个excel合并成一个excel
  14. 操作系统实验一:进程管理(含成功运行C语言源代码)
  15. 大连IT产业解析(1布局篇)
  16. 金蝶apusic9.0版本安装包
  17. html元素拖拽 标签拖拽
  18. 一般软件最小化绿色文件的制作方法:
  19. Mysql官方网站到底该如何下载、安装?(超详细教程)
  20. C# vs Java:北乔峰 vs 南慕容

热门文章

  1. 树形DP --算法竞赛专题解析(17)
  2. Keil嵌入式开发环境下完成一个基于STM32汇编程序的编写
  3. 微信平台抽奖算法总结-再也不用怕奖品被提前抢光
  4. jsp+JavaScript 实现简单的验证码登录
  5. 利用gradle plugin和git hook进行自动化代码格式化
  6. 一个华为技术人10年感悟
  7. windows 下nginx操作命令
  8. ArrayList排序
  9. 小程序开发过程中,图片过多,导致打包文件太大的解决方式
  10. 在 JavaScript 中复制对象