备忘录模式:保存对象状态

备忘录模式是一种行为型设计模式,用于保存对象的状态,以便在需要时恢复该状态。它通常用于撤销操作或回滚事务。

示例代码

// 被保存状态的对象
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恢复其状态。

缺点: 耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存。

posted @   穆海如枫  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示