• java设计模式----备忘录模式


    备忘录模式存在的意义在于在程序里面我们可能会遇到撤销操作的问题,将对象恢复到某个状态。类似事务的回滚。

    备忘录模式主要有三个对象

    发起人(Originator):要备份的成员,它提供一个创建备忘录的方法,将自身的信息复制到备忘录中,并提供另一个方法将备忘录中信息覆盖自身信息。

    备忘录(Memento):备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状态及获取发起人状态。

    管理角色(Caretaker):用于管理备忘录对象的实现类。

    发起人

    package memento;
    
    /**
     * @author mercy 
     * 发起人
     */
    public class Originator {
    	private String state;
    
    	// 创建备忘录
    	public Memento createMenmento() {
    		return new Memento(state);
    
    	}
    	// 还原
    	public void rollBack(Memento memento) {
    		state = memento.getState();
    	}
    	public String getState() {
    		return state;
    	}
    	public void setState(String state) {
    		this.state = state;
    		System.out.println("当前状态是:" + state);
    	}
    
    }
    

     备忘录

    package memento;
    
    /**
     * @author mercy
     *备忘录
     */
    public class Memento {
    	//状态
    	private String state;
    
    	public String getState() {
    		return state;
    	}
    	
    	public void setState(String state) {
    		this.state = state;
    	}
    	//构造函数初始化状态
    	public Memento(String state){
    		this.state=state;
    	}
    
    }
    

     管理者

    package memento;
    
    /**
     * @author mercy
     *管理者,管理备忘录
     */
    public class Caretaker {
    	private Memento memento;
    
    	public Memento getMemento() {
    		return memento;
    	}
    
    	public void setMemento(Memento memento) {
    		this.memento = memento;
    	}
    	
    
    }
    

     测试

    package memento;
    
    public class Test {
    	public static void main(String[] args) {
    		//创建发起人对象
    		Originator or=new Originator();
    		//设置初始状态
    		or.setState("On");
    		//创建管理者对象
    		Caretaker ct=new Caretaker();
    		//设置备份
    		ct.setMemento(or.createMenmento());
    		//更改状态
    		or.setState("Off");
    		//恢复
    		or.rollBack(ct.getMemento());
    		System.out.println(or.getState());
    	}
    
    }
    

     结果

    当前状态是:On
    当前状态是:Off
    On
    
  • 相关阅读:
    铺地毯
    解方程
    引水入城
    10.16今日暂时停更博客
    聪明的质监员
    CCF NOI plus 201(7)6 初赛题 解题报告
    初赛可能会用到的计算机基础理论知识整理
    火柴排队
    借教室
    10.10今日暂时停更博客
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5092347.html
Copyright © 2020-2023  润新知