备忘录模式又叫做快照模式(Snapshot Pattern)或 Token模式,是对象的行为模式。
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。
备忘录模式涉及的角色有三个:备忘录角色(Memento),发起人角色(Originator),负责人角色(Caretaker)。
//发起人
public class Originator
{
private String state;
//创建备忘录对象的方法
public Memento createMemento()
{
return new Memento(state);
}
//将发起人恢复到备忘录对象所记载的状态
public void restoreMemento(Memento memento)
{
this.state = memento.getState();
}
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
System.out.println("当前状态:" + this.state);
}
}
//备忘录角色
public 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;
}
}
//负责人角色
public class Caretaker
{
private Memento memento;
//备忘录的取值方法
public Memento retrieveMemento()
{
return this.memento;
}
//备忘录的赋值方法
public void saveMemento(Memento memento)
{
this.memento = memento;
}
}
//客户端测试类
public class Client
{
public static void main(String[] args)
{
Originator o = new Originator();
Caretaker taker = new Caretaker();
//改变发起人状态
o.setState("On");
//创建备忘录对象并保存起来
taker.saveMemento(o.createMemento());
//修改发起人状态
o.setState("OFF");
o.restoreMemento(taker.retrieveMemento());
System.out.println(o.getState());
}
}