一、概述
备忘录模式是一种行为型设计模式,用于捕获和存储对象的内部状态,并在需要时将对象恢复到之前的状态。备忘录模式允许在不暴露对象内部实现细节的情况下,对对象进行状态的保存和恢复。
在备忘录模式中,主要涉及三个角色:
- 发起人(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()
方法,从备忘录中恢复发起人的状态。最后,我们分别打印出发起人当前的状态。