设计模式之备忘录模式
来源:互联网 发布:mac svn图形化界面 编辑:程序博客网 时间:2024/06/01 07:45
概述:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
角色:
- Memento 备忘录存储原发器对象的内部状态
- Originator 原发器创建一个备忘录,用以记录当前时刻它的内部状态。 使用备忘录恢复内部状态
- Caretaker 负责保存好备忘录。 不能对备忘录的内容进行操作或检查
类图:
实现:
public class Originator { private String state; public Originator(String state) { this.state = state; } //保存 public Memento createMemento() { return new Memento(state); } //返回 public void history(Memento memento) { state = memento.getState(); } public String getState() { return state; } public void setState(String state) { this.state = state; } @Override public String toString() { System.out.println("Originator{" + "state='" + state + '\'' + '}'); return "Originator{" + "state='" + state + '\'' + '}'; }}
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; }}
public class Caretaker { private ArrayList<Memento> mementoList ; public Memento getMemento(int i){ if(null!=mementoList){ return mementoList.get(i); } return null; } public void setMemento(Memento memento){ if(null == mementoList){ mementoList = new ArrayList<>(); } mementoList.add(memento); }}
public class testMemento { //步数标志 private static int index = 0; public static void main(String[] args) { Caretaker caretaker = new Caretaker(); Originator originator = new Originator("1"); originator.toString(); caretaker.setMemento(originator.createMemento()); //每次备份,index+1 index++; originator.setState("2"); originator.toString(); caretaker.setMemento(originator.createMemento()); index++; originator.setState("3"); originator.toString(); originator.history(caretaker.getMemento(index-1)); //每次撤销,index-1 index--; originator.toString(); originator.history(caretaker.getMemento(index-1)); index--; originator.toString(); }}
打印:
Originator{state=’1’}
Originator{state=’2’}
Originator{state=’3’}
Originator{state=’2’}
Originator{state=’1’}
0 0
- 设计模式之备忘录
- 设计模式之备忘录
- 设计模式之备忘录
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式之备忘录模式
- 设计模式 之 备忘录模式
- 设计模式之备忘录模式
- 汉诺塔 (杭电acm2064)
- jQuery之Callbacks函数功能测试
- leetcode118 Pascal's Triangle
- 【DP】洛谷 P1064 金明的预算方案
- Scrapy用mysql存储的小技巧
- 设计模式之备忘录模式
- 布局css 标签重置以及类的初始化模板
- java 导出Excel
- spring boot (一)快速入门
- 《Effective java 第2版》读书笔记--创建/销毁对象
- C++标准输入输出流控制字符的使用
- 你现在就该学习Python
- 解析./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
- 大数据IMF传奇行动绝密课程第116课:Spark Streaming性能优化:如何在毫秒内处理大吞吐量和数据波动比较大的流计算