备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象内部状态的情况下捕获和恢复对象之前的状态。该模式通过将对象的状态封装到备忘录中,并将其保存在一个管理者类中,从而实现了对对象状态的保存和恢复。
- import java.util.ArrayList;
- import java.util.List;
-
- // 备忘录类
- class Memento {
- private String state;
-
- public Memento(String state) {
- this.state = state;
- }
-
- public String getState() {
- return state;
- }
- }
-
- // 原始对象类
- class Originator {
- private String state;
-
- public void setState(String state) {
- this.state = state;
- }
-
- public String getState(){
- return this.state;
- }
-
- public Memento createMemento() { // 创建备忘录
- return new Memento(state);
- }
-
- public void restoreFromMemento(Memento m) { // 从备忘录中恢复状态
- this.state = m.getState();
- }
- }
-
- // 管理者类
- class Caretaker {
- private List
mementos = new ArrayList<>(); -
- public void addMemento(Memento m) { // 添加备份到列表中
- mementos.add(m);
- }
-
- public Memento getMemeonto(int index) { // 获取指定索引处的备份数据
- return mementos.get(index);
- }
- }
-
- public class Main {
-
- public static void main(String[] args) {
- Originator originator = new Originator();
- Caretaker caretaker = new Caretaker();
-
- // 设置原始对象的状态
- originator.setState("State 1");
- caretaker.addMemento(originator.createMemento()); // 备份
-
- // 修改原始对象的状态
- originator.setState("State 2");
- caretaker.addMemento(originator.createMemento()); // 备份
-
- // 修改原始对象的状态
- originator.setState("State 3");
-
- System.out.println("Current state: " + originator.getState());
-
- // 恢复到备忘录1所保存的状态
- originator.restoreFromMemento(caretaker.getMemeonto(0));
- System.out.println("Restored state: " +originator.getState());
- }
- }
在上述示例中,我们定义了备忘录类 Memeto、原始对象类 Originator和管理者类 Caretaker。当需要保存当前状态时,调用原始对象的创建备忘录方法,并将返回的备忘录存储在管理者中。当需要恢复到之前某个状态时,从管理者获取对应索引处的备忘录,并调用原始对象的恢复方法进行处理。