Java 实现备忘录(Memento)模式
2014-10-13 21:38
447 查看
/** * 数据对象 * @author stone * */ public class DataState { private String action; public void setAction(String action) { this.action = action; } public String getAction() { return action; } }
/** * 一个保存另外一个对象内部状态拷贝 的对象.这样以后就可以将该对象恢复到原先保存的状态. * * @author stone * */ import java.io.File; import java.io.Serializable; public class Memento implements Serializable { /*private int number; private File file = null; public Memento(Originator o) { this.number = o.getNumber(); this.file = o.getFile(); } public int getNumber() { return this.number; } public void setNumber(int number) { this.number = number; } public File getFile() { return this.file; } public void setFile(File file) { this.file = file; } */ private DataState state; public Memento(Originator o) { this.state = o.getState(); } public DataState getState() { return state; } public void setState(DataState state) { this.state = state; } }
public class Originator {
/* private int number;
private File file = null;
public Originator() {
}
// 创建一个Memento,将自身作为参数传入
public Memento getMemento() {
return new Memento(this);
}
// 从Memento中取出保存的数据,恢复为原始状态
public void setMemento(Memento m) {
number = m.getNumber();
file = m.getFile();
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}*/
private DataState state;
public Originator() {
}
public Originator(DataState state) {
this.state = state;
}
// 创建一个Memento,将自身作为参数传入
public Memento getMemento() {
return new Memento(this);
}
// 从Memento中取出保存的数据,恢复为原始状态
public void setMemento(Memento m) {
/*
* getMemento() 创建的对象,保存在某个容器里,
* 当需要恢复时,将其传入当前方法, 再使用getState(),得出
*/
this.state = m.getState();
}
public DataState getState() {
return state;
}
public void setState(DataState state) {
this.state = state;
}
}
/* * 备忘录(Memento)模式 行为型模式 * 流程: Memento用于保存 数据状态, * Originator用于 加载数据, 建立Memento对象,及通过Memento恢复原始数据 */ public class Test { public static void main(String[] args) { // Originator originator = new Originator(); // originator.setNumber(8); // // Memento memento = originator.getMemento(); // System.out.println(memento.getNumber()); DataState state = new DataState(); state.setAction("copy a character"); Originator originator = new Originator(); System.out.println("创建原始数据"); originator.setState(state); System.out.println("创建备忘录对象, 保存原始数据状态"); Memento memento = originator.getMemento(); System.out.println("创建了一个新数据"); originator.setState(new DataState()); System.out.println("创建新数据后:" + originator.getState().getAction()); /* * memento 需要保存在某地,需要时取出,以恢复它内部所保存的数据 */ System.out.println("创建新数据后,恢复原数据"); originator.setMemento(memento); System.out.println(originator.getState().getAction()); } }打印
创建原始数据
创建备忘录对象, 保存原始数据状态
创建了一个新数据
创建新数据后:null
创建新数据后,恢复原数据
copy a character
相关文章推荐
- Java设计模式-----Memento备忘录模式
- Java设计模式菜鸟系列(十九)备忘录模式建模与实现
- java设计模式之备忘录模式Memento
- java设计模式--迭代器模式 Iterator,备忘录模式 Memento,中介者模式 Mediator
- Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式
- 《大话设计模式》java实现之备忘录模式
- 详解备忘录模式及其在Java设计模式编程中的实现
- 《模式——工程化实现及扩展》(设计模式C# 版)《备忘录模式 Memento》——“自我检验"
- C++设计模式实现--备忘录(Memento)模式
- Memento 备忘录模式 使用Boost智能指针实现
- php,java实现备忘录模式
- Java设计模式(行为型)之-备忘录模式(Memento)
- Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式
- JAVA设计模式-备忘录模式-Memento-游戏备份存档
- 《模式——工程化实现及扩展》(设计模式C# 版)《备忘录模式 Memento》——“自我检验" 参考答案
- Java设计模式-----Memento备忘录模式
- C++设计模式实现--备忘录(Memento)模式
- 从设计模式学习oop思维,最后再具体通过java实现
- 23种经典设计模式的java实现_1_抽象工厂模式
- 23种经典设计模式的java实现_3_桥接模式