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

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

发起人(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