备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
意图
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
实现
实习如下
做一个计步器,可以随时回退
- 创建备忘录
public class RunMemento{
private String state;
public RunMemento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
- 创建运动类
public class RunOriginator{
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public RunMemento save(){
return new RunMemento(state);
}
public void get(RunMemento memento){
state = memento.getState();
}
}
- 实现备忘录
public class RunCareTaker{
private List<RunMemento> mementoList = new ArrayList<>();
public void add(RunMemento memento){
mementoList.add(memento);
}
public RunMemento get(int i){
return mementoList.get(i);
}
}
- 使用
public void main(String... args){
RunOriginator originator = new RunOriginator();
RunCareTaker careTaker = new RunCareTaker();
originator.setState("#1");
originator.setState("#2");
careTaker.add(originator.save());
originator.setState("#3");
careTaker.add(originator.save());
originator.setState("#4");
careTaker.add(originator.save());
originator.setState("#5");
System.out.println("runing "+originator.getState());
originator.get(careTaker.get(0));
System.out.println("runing "+originator.getState());
originator.get(careTaker.get(2));
System.out.println("runing "+originator.getState());
}
- 结果
I/System.out: runing #5
I/System.out: runing #2
I/System.out: runing #4