备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern)是一种行为型设计模式,它用于捕获对象的内部状态,并允许在不破坏封装性的前提下将状态保存和恢复。备忘录模式允许将对象的状态保存到一个备忘录对象中,以便在以后的时间点将对象恢复到之前的状态。
备忘录模式的核心思想是将状态保存和恢复的操作与对象分离开来,从而提高系统的可维护性和灵活性。备忘录对象通常由三个角色组成:
发起人(Originator):负责创建备忘录对象,并将自身状态保存到备忘录中,也负责从备忘录中恢复状态。
备忘录(Memento):存储发起人对象的内部状态。
负责人(Caretaker):负责管理备忘录对象,可以存储和检索备忘录对象,但不直接操作备忘录的状态。
场景
撤销和恢复功能:当需要在应用程序中实现撤销和恢复功能时,备忘录模式非常有用。
状态保存和恢复:当需要保存对象的状态,以便在将来的某个时间点恢复到之前的状态时,备忘录模式可以派上用场。
快照功能:备忘录模式可以用于创建对象的快照,以便在需要时恢复到快照状态。
实现
// 备忘录类
class Memento {
constructor(state) {
this.state = state;
}
getState() {
return this.state;
}
}
// 发起人类
class Originator {
constructor() {
this.state = "";
}
setState(state) {
this.state = state;
}
getState() {
return this.state;
}
createMemento() {
return new Memento(this.state);
}
restoreMemento(memento) {
this.state = memento.getState();
}
}
// 负责人类
class Caretaker {
constructor() {
this.mementos = [];
}
addMemento(memento) {
this.mementos.push(memento);
}
getMemento(index) {
return this.mementos[index];
}
}
// 客户端代码
const originator = new Originator();
const caretaker = new Caretaker();
originator.setState("State 1");
caretaker.addMemento(originator.createMemento());
originator.setState("State 2");
caretaker.addMemento(originator.createMemento());
originator.setState("State 3");
console.log("Current State:", originator.getState()); // Output: Current State: State 3
originator.restoreMemento(caretaker.getMemento(1));
console.log("Restored State:", originator.getState()); // Output: Restored State: State 2
在上面的示例中,Memento 类用于存储发起人对象的状态。Originator 类是发起人,负责创建备忘录对象,并将自身状态保存到备忘录中,同时可以从备忘录中恢复状态。Caretaker 类是负责人,负责管理备忘录对象,包括添加和检索备忘录对象。
客户端代码演示了如何使用备忘录模式来保存和恢复发起人对象的状态,以实现撤销和恢复功能。备忘录模式有助于实现对象状态的保存和恢复,以及撤销和恢复功能。