首页 > 代码库 > Java 实现备忘录(Memento)模式

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



Java 实现备忘录(Memento)模式