您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: