Java 实现备忘录(Memento)模式

来源:互联网 发布:mysql 导入employees 编辑:程序博客网 时间:2024/04/30 19:54
/** * 数据对象 * @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



0 0
原创粉丝点击