备忘录模式(Memento)

定义:在不破坏对象封装的前提下,捕获对象内部的状态,并在该对象之外保存这个状态,以便后面恢复,这个重点是在对象之外保存这个状态。

网上的一个例子:

package memento;
/**
 *create by datao.wang 2014-2-8-上午11:16:50	
 */
public class Client {
	public static void main(String[] args){
		Originator originator = new Originator();
		originator.setState("状态1");
		System.out.println("初始状态:"+originator.getState());
		Caretaker caretaker = new Caretaker();
		caretaker.setMemento(originator.createMemento());
		originator.setState("状态2");
		System.out.println("改变后状态:"+originator.getState());
		originator.restoreMemento(caretaker.getMemento());
		System.out.println("恢复后状态:"+originator.getState());
	}
}
class Originator {
	private String state ="1";
	
	public String getState() {
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
	public Memento createMemento(){  //备忘
		return new Memento(this.state);
	}
	public void restoreMemento(Memento memento){//恢复
		this.setState(memento.getState());
	}
}

/**
 * @author wdt
 * 备忘录 存储状态
 */
class Memento {
	private String state = "";
	public Memento(String state){
		this.state = state;
	}
	public String getState() {
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
}
/**
 * @author wdt
 * 状态管理者 ,管理状态,用于恢复
 */
class Caretaker {
	private Memento memento;
	public Memento getMemento(){
		return memento;
	}
	public void setMemento(Memento memento){
		this.memento = memento;
	}
}

应用场景:

   1、ctrl+z 记事本或文档中的恢复操作。

缺点:耗费资源。

猜你喜欢

转载自wdt1988520.iteye.com/blog/2012295