备忘录模式
备忘录模式(Memento Pattern)是一种行为型设计模式,用于保存和恢复对象的内部状态,而不暴露对象的实现细节。这种模式使得对象能够恢复到之前的状态,从而支持撤销和恢复操作。
主要角色
- 发起人(Originator):
- 负责创建一个包含自身内部状态的备忘录对象,并可以使用备忘录恢复状态。
- 备忘录(Memento):
- 用于存储发起人的内部状态。它通常是一个不可修改的对象,保存了发起人的状态数据。
- 管理者(Caretaker):
- 负责保存备忘录对象,但不对备忘录的内容进行操作。它只是负责备忘录的管理,如保存和恢复。
工作流程
- 保存状态:
- 发起人创建一个备忘录对象,将自身的内部状态保存到备忘录中,并返回给管理者。
- 恢复状态:
- 当需要恢复到之前的状态时,发起人使用备忘录对象恢复内部状态。
示例
// 发起人
public class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Memento saveToMemento() {
return new Memento(state);
}
public void restoreFromMemento(Memento memento) {
this.state = memento.getState();
}
// 备忘录(Memento)
public static class Memento {
private final String state;
private Memento(String state) {
this.state = state;
}
private String getState() {
return state;
}
}
}
// 管理者(Caretaker)
public class Caretaker {
private Originator.Memento memento;
public void saveMemento(Originator.Memento memento) {
this.memento = memento;
}
public Originator.Memento retrieveMemento() {
return memento;
}
}
//test
public class TestMementoPattern {
public static void main(String[] args) {
// 创建发起人对象
Originator originator = new Originator();
// 创建负责人对象
Caretaker caretaker = new Caretaker();
// 设置初始状态
originator.setState("忘不掉");
System.out.println("Initial State: " + originator.getState());
// 保存当前状态到备忘录
caretaker.saveMemento(originator.saveToMemento());
// 修改状态
originator.setState("不知道,也许");
System.out.println("Modified State: " + originator.getState());
// 从备忘录恢复状态
originator.restoreFromMemento(caretaker.retrieveMemento());
System.out.println("Restored State: " + originator.getState());
}
}
发起人(Originator):
setState
和getState
方法用于设置和获取发起人的状态。saveToMemento
方法创建一个备忘录对象,保存当前状态。restoreFromMemento
方法使用备忘录恢复之前的状态。- 内部静态类
Memento
用于封装发起人的状态,并提供一个访问方法getState
。
管理者(Caretaker):
saveMemento
方法保存一个备忘录对象。retrieveMemento
方法检索保存的备忘录对象。
测试类(TestMementoPattern):
- 创建
Originator
和Caretaker
对象。 - 设置初始状态,保存到备忘录,修改状态,最后从备忘录恢复状态并打印结果。
优点
- 封装性:备忘录模式避免了暴露发起人的内部状态。
- 撤销/恢复功能:支持对象状态的回溯和恢复。
缺点
- 开销:备忘录可能会增加存储和管理开销,特别是在保存大量状态时。
- 复杂性:可能会引入额外的复杂性,需要额外的类和管理代码。
备忘录模式在需要状态恢复的场景中非常有用,比如撤销操作、历史记录管理等。
标签:Originator,状态,模式,备忘录,state,public,Memento From: https://www.cnblogs.com/20lxj666/p/18396281