参考地址:http://www.runoob.com/design-pattern/memento-pattern.html
对原文总结调整,以及修改代码以更清晰的展示:

备忘录模式(快照模式):

     定义:顾名思义,备忘录模式是在不破坏封装性的前提下,通过备忘录对象,记录一个对象的内部状态,并在该对象之外保存这个状态。

  应用场景: 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。

图:日后再画

代码:

1、状态记录类:

package com.pat.snap;
/**
* 备忘录对象,用于记录
* @author Administrator
*
*/
public class Memento {
private String text=""; public String getText() {
return text;
} public void setText(String text) {
this.text = text;
} }

2、编辑器-被记录类

package com.pat.snap;
/**
* 记事本对象,被记录的对象
* @author Administrator
*
*/
public class TextEditor {
//正在编辑的内容
private String text=""; public String getText() {
return text;
} public void setText(String text) {
this.text = this.text+text;
}
//保存
public Memento saveHistory() {
Memento curr = new Memento();
curr.setText(this.text);
return curr;
}
//ctrl+z
public void backUp(Memento mem) {
this.text=mem.getText();
} }

3、存储记录

package com.pat.snap;

import java.util.ArrayList;
import java.util.List; /**
* 管理历史,负责恢复
* @author Administrator
*
*/
public class CareTaker {
private List<Memento> mementoList = new ArrayList<Memento>(); public void add(Memento state){
mementoList.add(state);
} public Memento get(int index){
return mementoList.get(index);
} }

4、测试类

package com.pat.snap;
/**
* 测试类
* @author ZX
*
*/
public class Test {
public static void main(String[] args) {
//创建历史记录管理类
CareTaker ct =new CareTaker();
//记事本编辑文件
TextEditor td = new TextEditor();
td.setText("123");
td.setText("456");
//创建快照1
Memento h1 = td.saveHistory();
ct.add(h1);
td.setText("789");
td.setText("10");
td.setText("11"); //创建快照2
Memento h2 = td.saveHistory();
ct.add(h2);
//获取快照1
Memento memento1 = ct.get(0);
System.out.println(memento1.getText());
//获取快照2
Memento memento2 = ct.get(1);
System.out.println(memento2.getText()); }
}

5、运行结果:

123456
1234567891011

最新文章

  1. 前端构建工具之gulp_常用插件
  2. json_decode返回NULL
  3. linux 高性能服务器编程
  4. 分享一个漂亮WPF界面框架创作过程及其源码
  5. 【分布式协调器】Paxos的工程实现-Cocklebur状态转移
  6. git之remote branch controller(远程分支控制)
  7. 面向服务的架构SOA
  8. ZooKeeper典型应用场景(转)
  9. LeetCode Lowest Common Ancestor of a Binary Serach Tree
  10. erlang: Programming Rules and Conventions。
  11. Poj 1013 Counterfeit Dollar / OpenJudge 1013(2692) 假币问题
  12. htmlparser使用例子(全) 转载
  13. 数据类型的转换String
  14. PAT-1099(Build A Binary Search Tree)
  15. JMockit常用操作
  16. rsync 自动创建目录的坑点
  17. 基于FATFS的磁盘分布
  18. canvas - 钟表
  19. linux上面是否有安装redis,redis启动
  20. Codeforces 675E Trains and Statistic - 线段树 - 动态规划

热门文章

  1. C# WPF 实现鼠标固定在指定范围内运动
  2. Emgu-WPF 激光雷达研究-绘制雷达图
  3. ubuntu16.04安装搜狗输入法
  4. 深入解析Android关机
  5. 【Ubuntu】查看进程端口占用信息
  6. 图像滤镜艺术---(Sketch Filter)素描滤镜
  7. Win8 Metro(C#)数字图像处理--2.72图像噪声
  8. mysql自动化安装脚本(二进制安装)
  9. C#高性能大容量SOCKET并发(四):缓存设计
  10. 创建第一个ASP.NET MVC项目