1. 发起人(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) {
this.state = memento.getState();
}
}
2. 备忘录(Memento): 存储发起人对象的内部状态,并可以防止发起人以外的对象访问备忘录的内部状态。
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
3. 负责人(Caretaker): 负责保存备忘录,并在需要时将备忘录提供给发起人。
import java.util.ArrayList;
import java.util.List;
public class Caretaker {
private List<Memento> mementoList = new ArrayList<>();
public void addMemento(Memento memento) {
mementoList.add(memento);
}
public Memento getMemento(int index) {
return mementoList.get(index);
}
}
4. 客户端代码: 创建发起人对象、备忘录对象和负责人对象,通过负责人保存和恢复发起人的状态。
public class Client {
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());
}
}
在这个例子中,备忘录模式允许发起人保存其内部状态的快照,并在需要时还原到先前的状态。这对于实现撤销、恢复和历史记录等功能非常有用。
转载请注明出处:http://www.zyzy.cn/article/detail/13955/设计模式