Heim > Java > javaLernprogramm > Beispielcode für die Java-Memento-Musterimplementierung

Beispielcode für die Java-Memento-Musterimplementierung

黄舟
Freigeben: 2017-03-11 11:26:20
Original
1538 Leute haben es durchsucht

Beispielcode für die Java-Memento-Musterimplementierung

/**
 * 数据对象
 * @author stone
 *
 */
public class DataState {
	private String action;

	public void setAction(String action) {
		this.action = action;
	}
	
	public String getAction() {
		return action;
	}

}
Nach dem Login kopieren
/**
 * 一个保存另外一个对象内部状态拷贝 的对象.这样以后就可以将该对象恢复到原先保存的状态.
 * 
 * @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;
	}
}
Nach dem Login kopieren
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;
	}
}
Nach dem Login kopieren
/*
 * 备忘录(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());
	}
}
Nach dem Login kopieren

Drucken

创建原始数据
创建备忘录对象, 保存原始数据状态
创建了一个新数据
创建新数据后:null
创建新数据后,恢复原数据
copy a character
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeispielcode für die Java-Memento-Musterimplementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage