• 技术文章 >Java >java教程

    Java备忘录(Memento)模式实现的示例代码

    黄舟黄舟2017-03-11 11:26:20原创719
    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)模式实现的示例代码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:Java实现命令(Command)模式的示例代码 下一篇:Java实现状态(State)模式的示例
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网