备忘录模式是一种行为型设计模式,用于保存对象的状态,以便在需要时恢复该状态。它通常用于撤销操作或回滚事务。
示例代码
// 被保存状态的对象
class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public Memento saveState() {
return new Memento(state);
}
public void restoreState(Memento memento) {
state = memento.getState();
}
}
// 保存的状态
class Memento {
private final String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
// 管理所有保存的状态
class Caretaker {
private final List<Memento> mementos = new ArrayList<>();
private int currentIndex = -1;
public void addMemento(Memento memento) {
mementos.add(memento);
currentIndex++;
}
public Memento undo() {
if (currentIndex <= 0) {
throw new IllegalStateException("Can not undo any further");
}
currentIndex--;
return mementos.get(currentIndex);
}
public Memento redo() {
if (currentIndex >= mementos.size() - 1) {
throw new IllegalStateException("Can not redo any further");
}
currentIndex++;
return mementos.get(currentIndex);
}
}
使用备忘录模式,当需要保存当前状态时,Originator
调用saveState()方法创建一个Memento
对象,并将其传递给Caretaker进行管理。当需要恢复之前的某个状态时,Originator
可以从Caretaker
中获取相应的Memento
对象,并将其传递给restoreState()方法进行恢复。
这个示例展示了一个简单的撤销和重做功能:每次保存状态时,都会将其加入到Caretaker
中管理。当用户执行撤销操作时,Caretaker
从历史记录中取出上一个状态的Memento
对象,然后Originator
使用该对象恢复状态;当用户执行重做操作时,则是取出下一个状态的Memento
对象,并让Originator
恢复其状态。
缺点: 耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存。
标签:状态,String,保存,模式,备忘录,state,currentIndex,public,Memento From: https://www.cnblogs.com/li053/p/17475659.html