一、概述

备忘录模式是一种行为型设计模式,用于捕获和存储对象的内部状态,并在需要时将对象恢复到之前的状态。备忘录模式允许在不暴露对象内部实现细节的情况下,对对象进行状态的保存和恢复。

在备忘录模式中,主要涉及三个角色:

  • 发起人(Originator):负责创建备忘录对象,并将其当前状态保存到备忘录中,也可以从备忘录中恢复自身状态。
  • 备忘录(Memento):用于存储发起人的状态,通常具备对发起人状态的访问权限。
  • 管理者(Caretaker):负责管理备忘录对象,可以保存多个备忘录对象,并在需要时将其提供给发起人进行状态的恢复。

二、代码

下面是一个备忘录模式的代码示例,其中我们定义了发起人类 Originator、备忘录类 Memento 和管理者类 Caretaker。

//1.备忘录类
public class Memento {
    private String state;

    public Memento(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }
}
//2.发起人
public class Originator {
    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public String getState() {
        return state;
    }

    /**
     * 保存状态
     * @return
     */
    public Memento saveStateToMemento() {
        return new Memento(state);
    }

    /**
     * 恢复状态
     * @param memento
     */
    public void restoreStateFromMemento(Memento memento) {
        state = memento.getState();
    }
}
//3.管理者类
public class Caretaker {
    private List<Memento> mementos = new ArrayList<>();

    public void addMemento(Memento memento) {
        mementos.add(memento);
    }

    public Memento getMemento(int index) {
        return mementos.get(index);
    }
}
//4.测试代码
public class Test {
    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.restoreStateFromMemento(caretaker.getMemento(0));
        System.out.println("Current State: " + originator.getState());

        // 恢复到修改后的状态
        originator.restoreStateFromMemento(caretaker.getMemento(1));
        System.out.println("Current State: " + originator.getState());
    }
}

在测试代码中,我们创建了发起人对象 Originator 和管理者对象 Caretaker。首先,我们设置了发起人的初始状态,并将其保存到备忘录中(通过调用 saveStateToMemento() 方法)。然后,我们修改了发起人的状态,并将其再次保存到备忘录中。接下来,我们通过调用 restoreStateFromMemento() 方法,从备忘录中恢复发起人的状态。最后,我们分别打印出发起人当前的状态。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐