设计模式——备忘录模式

      备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。

  备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。

      简单的说备忘录模式就是在想让对象回到原来某个时间点的状态时,可以通过撤销(undo)来简单的实现。

      在备忘录模式中,源发器对象是要备忘的对象。备忘录对象用来备忘某个时间点的对象状态。负责人对象用来记录备忘的那个时间点。

      备忘录有;两个重要的目标:一个是存储系统关键对象的重要状态,二是维护关键对象的封装。

      看一个介绍:http://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html

       看一个Demo:

 

/**
 * 源发器对象
 * @author wxisme
 *
 */
public class Emp {
	private String name;
	private int age;
	
	public Emp(String name, int age) {
		this.age = age;
		this.name = name;
	}
	//数据恢复
	public void recovery(EmpMemento emt) {
		this.age = emt.getAge();
		this.name = emt.getName();
	}
	//备忘
	public EmpMemento memento() {
		return new EmpMemento(this);
	}
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	

}

public class EmpMemento {
	private String name;
	private int age;
	
	public EmpMemento(Emp emp) {
		this.age = emp.getAge();
		this.name = emp.getName();
	}
	
	
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}

public class Taker {
	private EmpMemento empm;

	public EmpMemento getEmpm() {
		return empm;
	}

	public void setEmpm(EmpMemento empm) {
		this.empm = empm;
	}
	
	
}

 PS:深度备忘,保证对象中的属性对象不会随着源发对象的改变而改变,参考原型模式中的深度拷贝。

posted @ 2015-05-30 17:29  Pickle  阅读(1044)  评论(0编辑  收藏  举报