Java备忘录(Memento)模式实现的示例代码
/**
* 数据对象
* @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