备忘录模式定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象。这样以后就可以将该对象恢复到原先保存的状态。
初步理解:因为要保存状态,因此要有一个Memento类来存储对象的内部状态。因为有很多状态要保存,因此需要一个CareTaker类来管理这些Memento。Originator是要保存状态的对象。
code…
Originator类:
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento createState()
{
return new Memento(this.state);
}
public void restoreState(Memento memento)
{
this.state=memento.getState();
}
public void show()
{
System.out.println("当前状态:"+this.state);
}
}
当这个类需要保存它的状态时,就调用它的createState方法。就会生成一个Memento对象,将这个对象传递给careTaker,将其添加到careTaker的集合当中。
Memento类:
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
careTaker类:
public class Caretaker {
private ArrayList<Memento> arrayList=new ArrayList<>();
public void saveMemento(Memento memento)
{
arrayList.add(memento);//添加备忘录
}
public Memento getMemento(int index)
{
return arrayList.get(index);
}
}
main方法:
public class Main {
public static void main(String[] args) {
Originator originator=new Originator();//要存储这个对象的状态
Caretaker caretaker=new Caretaker();//管理备忘录的对象
originator.setState("sleep");//设置对象的状态
originator.show();//显示对象的当前状态
caretaker.saveMemento(originator.createState());//对对象的当前状态进行备份
originator.setState("fly");//设置新状态
originator.show();
caretaker.saveMemento(originator.createState());//继续备份
originator.setState("run");
originator.show();
caretaker.saveMemento(originator.createState());
originator.restoreState(caretaker.getMemento(1));//恢复到第二个状态
originator.show();
}
}
总结:备忘录就是对历史状态的备份,备份会有很多份,因此要有一个管理类负责管理这些备份。这个管理可以添加和删除备份。
上一篇 |
---The End---
| 下一篇 |