设计模式之:备忘录模式
备忘录模式(Memento Pattern)
备忘录模式是一种行为设计模式,用于捕获对象的内部状态并在不破坏封装性的情况下将其外部化,以便稍后恢复到此状态。以下是Java实现备忘录模式的详细方法。
核心角色
- Originator(发起人):负责创建备忘录以记录当前状态,并可从备忘录恢复状态。
- Memento(备忘录):存储Originator的内部状态。
- Caretaker(管理者):负责保存和提供备忘录,但不能修改其内容。
Java实现示例
定义备忘录类(Memento)
public class Memento {private final String state;public Memento(String state) {this.state = state;}public String getState() {return state;}
}
定义发起人类(Originator)
public class Originator {private String state;public void setState(String state) {this.state = state;}public String getState() {return state;}// 创建备忘录public Memento saveStateToMemento() {return new Memento(state);}// 从备忘录恢复状态public void restoreStateFromMemento(Memento memento) {state = memento.getState();}
}
定义管理者类(Caretaker)
import java.util.ArrayList;
import java.util.List;public class Caretaker {private final List<Memento> mementoList = new ArrayList<>();public void addMemento(Memento memento) {mementoList.add(memento);}public Memento getMemento(int index) {return mementoList.get(index);}
}
客户端代码示例
public class MementoPatternDemo {public static void main(String[] args) {Originator originator = new Originator();Caretaker caretaker = new Caretaker();originator.setState("State #1");caretaker.addMemento(originator.saveStateToMemento());originator.setState("State #2");caretaker.addMemento(originator.saveStateToMemento());originator.setState("State #3");System.out.println("Current State: " + originator.getState());// 恢复到第一个状态originator.restoreStateFromMemento(caretaker.getMemento(0));System.out.println("Restored State: " + originator.getState());}
}
输出结果
Current State: State #3
Restored State: State #1
关键点
- 封装性保护:备忘录模式确保对象的状态对外不可见,仅通过Memento类访问。
- 撤销操作:适用于需要撤销或回滚功能的场景,如文本编辑器、游戏存档等。
- 性能优化:频繁保存状态可能导致内存消耗增加,需合理控制备忘录数量。
通过上述实现,可灵活保存和恢复对象状态,满足业务需求。