备忘录模式又叫做快照模式(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:深度备忘,保证对象中的属性对象不会随着源发对象的改变而改变,参考原型模式中的深度拷贝。