我更喜欢把它叫做备份模式
考虑这样一种场景:在我们做实验的时候,我们必须保证一步一步的做,并且在实验当前必须保证我前面的步骤都是正确的?不然如果出了问题,你都不知道是哪一步出的问题,好吧,如果你能保证前面的都正确,那么你在做下一步的时候,就要考虑我是不是能把情况恢复到这里,因为你下一步可能出错,所以你要有恢复的能力啊!这样你就得懂得备份,如果程序在下一步出现问题,你就用备份恢复一下。
好吧,我可以将当前状态备份起来不就行了嘛?
备忘录模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将对象恢复到原先保存的状态。
备忘录模式的三个角色:
Originator 发起人角色
记录当前时刻得内部状态,负责定义那些属于备份范围的状态,负责创建和恢复备忘录数据
MeMennto 备忘录角色
负责存储当前的对象的内部状态,在需要的时候提供发起人保存起来的内部状态
Caretaker 备忘录管理员角色,它可以让我们在场景类里面不知道备忘录角色的存在,直接使用管理员就可以了。
package com.gengu.备忘录;
/**
* 现在用实验类模拟我们的场景
* 实验中所有一个状态,当我们在往下去做一个实验的时候总是希望能正确
* 不过错误是在所难免的,那么我们在实验失败的时候总是希望能回到上次正确的地方再做尝试
* 那么这种应用刚好可以被备忘录模式所使用
* */
public class Experiment {
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){
this.setState(memento.getState());
}
}
package com.gengu.备忘录;
/**
* 这个就是备忘录
* */
public class Memento {
//实验的状态
private String state = "";
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento(String state){
this.state = state;
}
}
package com.gengu.备忘录;
public class Manager {
Memento memento = null;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
场景类
package com.gengu.备忘录;
public class Client {
public static void main(String[] args) {
//现在做实验
Experiment experiment = new Experiment();
System.out.println("没做之前的状态为"+experiment.getState());
//做一个备份
Manager manager = new Manager();
manager.setMemento(experiment.createMemento());
experiment.setState("失败了");
System.out.println("继续下一步的时候发现"+experiment.getState());
//下面一步就是恢复现场
experiment.restoreMemento(manager.getMemento());
System.out.println("又将实验的状态恢复成"+experiment.getState());
}
}
备忘录模式我更愿意叫他备份模式,备份的作用就是为了恢复现场,他主要使用在需要保存和恢复数据的相关状态场景,提供一个可回滚的操作,就想CTRL+z的操作。
分享到:
相关推荐
备忘录模式.rar备忘录模式.rar备忘录模式.rar
设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式
备忘录模式Demo
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 备忘录模式java demo
java设计模式-备忘录模式源代码, 源码中为设计模式的工程源文件,已经测试过,没有问题。
设计模式-备忘录模式(讲解及其实现代码)
C#备忘录模式 代码例子 写的比较乱,呵呵
设计模式之备忘录模式的Java版本实现和UML类设计图
本例包含备忘录模式的C#实现,及一个应用案例,加深理解与运用。
备忘录模式C++实现,若理解有误,请留言指出。
备忘录模式在不破坏封装的前提下,记录一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态,本例中设置历次成绩,并记录和保存,最后返回最好成绩
C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式
责任链模式 备忘录模式 单(双)链表 显示 "正在加载,请稍后……" 原理 1、责任链模式: * 责任连模式的结构 责任连模式的类图非常简单,它由一个抽象地处理类和它的一组实现类组成: * 抽象处理类:抽象处理类中...
备忘录模式 C++ 实现
备忘录模式的示例代码和文档,学习备忘录模式的参考资料。
在备忘录模式里,一个备忘录是一个对象,它存储另一个对象(备忘录的原发器)在某个瞬间的内部状态。备忘的目的就是为了以后在需要的时候,可以将原发器对象的状态恢复(undo/rollback)到备忘录所保存的状态。 备忘...
Android备忘录模式简单Demo,实现通过memoto备忘录实体,实现游戏存档和读档的功能简单模拟,便于理解备忘录模式.同步博文:http://blog.csdn.net/qq_28690547/article/details/50708415
设计模式之备忘录 和 状态模式精讲 19.1 场景问题 19.1.1 开发仿真系统 考虑这样一个仿真应用,功能是:模拟运行针对某个具体问题的多个解决方案,记录运行过程的各种数据,在模拟运行完成过后,好对这多个解决...