备忘录模式:在不破坏封装性的前提下。捕获一个对象的内部状态,并在该对象之外保存这个状态。
这样以后就能够将该对象恢复到原先保存的状态。
适用场合:比較适合用于功能比較复杂。但须要维护或记录属性历史的类,或者须要保存的属性仅仅是众多属性中的一小部分时。
首先定义一个Originator(发起人)类
public class Originator {
private String state;//须要保存的属性(能够定义多个)
public void setState(String state){
this.state=state;
}
public String getState(){
return state;
}
//创建备忘录。将当前须要保存的信息导入并实例化一个Memento对象
public Memento createMemento(){
return new Memento(state);
}
//恢复备忘录
public void setMemento(Memento memento){
state=memento.getState();
}
public void show(){
System.out.println("state="+state);
}
}
定义一个Memento(备忘录)类
public class Memento {
private String state;
//通过构造方法将相关数据导入
public Memento(String state){
this.state=state;
}
public String getState(){
return state;
}
}
然后定义一个Caretaker(管理者)类。封装Memento
public class Caretaker {
private Memento memento;
//设置备忘录
public void setMemento(Memento memento){
this.memento=memento;
}
//得到备忘录
public Memento getMemento(){
return memento;
}
}
client代码
public static void main(String[] args) {
//备忘录模式
Originator originator=new Originator();
originator.setState("on");//初始状态为on
originator.show();
Caretaker caretaker=new Caretaker();
caretaker.setMemento(originator.createMemento());
originator.setState("off");//状态改变为off
originator.show();
//恢复原来状态
originator.setMemento(caretaker.getMemento());
originator.show();
}