个人网站收款接口,win10有网但是浏览器网页打不开,网站建设的机构,qq是什么公司开发的简介
备忘录模式#xff08;Memento Pattern#xff09;是一种行为型设计模式#xff0c;它用于保存和恢复对象的状态。备忘录模式通过将对象的状态封装成一个备忘录#xff08;Memento#xff09;#xff0c;并将备忘录保存在一个管理者#xff08;Caretaker#xff…简介
备忘录模式Memento Pattern是一种行为型设计模式它用于保存和恢复对象的状态。备忘录模式通过将对象的状态封装成一个备忘录Memento并将备忘录保存在一个管理者Caretaker中来实现对对象状态的保存和恢复。
备忘录模式的核心思想是将对象的状态封装成一个备忘录对象而不是直接暴露状态给其他对象。这样其他对象就无法直接操作对象的状态。同时备忘录模式还提供了一个管理者对象用于保存和管理备忘录可以实现对对象状态的保存和恢复。
描述
备忘录模式由三个核心组件组成Originator原始对象、Memento备忘录和Caretaker管理者。
Originator类保存了需要保存状态的对象并能够根据当前状态创建备忘录和从备忘录中恢复原始状态。Memento类是备忘录对象负责保存Originator对象的状态。Caretaker类是管理者对象负责保存备忘录对象提供了对备忘录的保存、获取和恢复功能。
原理
备忘录模式通过将对象的状态保存在备忘录对象中将备忘录对象保存在管理者对象中来实现对对象状态的保存和恢复。当需要保存当前状态时Originator对象会创建一个包含状态的备忘录对象并将备忘录对象交给Caretaker对象保存。当需要恢复到之前的状态时Originator对象会从Caretaker对象获取对应的备忘录对象并根据备忘录对象中保存的状态恢复原始状态。 1.创建一个备忘录该类用于存储原发器的状态。 2.创建一个原发器类该类拥有需要保存和恢复的状态并提供保存状态和恢复状态的方法。 3.创建一个管理者类用于管理备忘录对象的保存和获取。 4.在需要保存原发器状态的时候原发器创建一个备忘录对象并将自己的状态传递给备忘录对象。 5.管理者对象保存备忘录对象。 6.在需要恢复原发器状态的时候管理者对象将备忘录对象交还给原发器。 类图 示例
假设有一个文本编辑器用户可以输入文本并进行编辑操作。当用户希望撤销一些编辑操作时可以使用备忘录模式保存编辑器状态。
在示例中有三个主要类
Editor原发器表示文本编辑器具有保存和恢复状态的方法以及一个用于保存和获取备忘录的方法。EditorState备忘录表示编辑器的状态保存了编辑器的文本内容。EditorHistory管理者管理备忘录对象的保存和获取。
C示例代码
#include iostream
#include stack
#include string// 备忘录
class Memento {
public:Memento(const std::string text) : text(text) {}std::string getText() const {return text;}private:std::string text;
};// 原始对象
class TextEditor {
public:void setText(const std::string text) {this-text text;}Memento createMemento() {return Memento(text);}void restoreFromMemento(const Memento memento) {text m.getText();}void printText() {stdcout text std::endl;}private:std::string text;
};// 管理者
class Caretaker {
public:void saveMemento(const Memento memento){mementos.push(memento);}Memento getMemento() {if (!mementos.empty()) {Memento memento mementos.top();mementos.pop();return memento;} else {return Memento();}}private:std::stackMemento mementos;
};int main() {TextEditor editor;Caretaker caretaker;// 设置初始文本editor.setText(Hello, World!);// 保存文本状态caretaker.saveMemento(editor.createMemento());// 修改文本editor.setText(Hello, Memento!);// 打印当前文本std::cout Current Text: ;editor.printText();// 恢复到之前的状态Memento m caretaker.getMemento();editor.restoreFromMemento(memento);// 再次打印文本std::cout Restored Text: ;editor.printText();return 0;
}输出结果
Current Text: Hello, Memento!Restored Text: Hello, World!解释
在上述示例中TextEditor类是原始对象Originator它保存了需要保存状态的文本并提供了创建备忘录和从备忘录中恢复状态的方法。Memento类是备忘录Memento它负责保存TextEditor对象的状态。Caretaker类是管理者Caretaker它负责保存备忘录对象并提供了对备忘录的保存和获取功能。
首先设置初始文本为Hello, World!“并保存初始状态。然后我们修改文本为Hello, Memento Pattern!”并打印当前文本。接下来我们从Caretaker对象获取之前保存的备忘录对象并将文本恢到之前的状态。最后再次打印文本可以看到文本已经恢复为之前保存的状态。
结论
备忘录模式通过将对象的状态保存到备忘录对象中并在的时候将其恢复实现了对对象状态的保存和恢复功能同时保持了对象的封装性。该模式可以用于需要可撤销操作或历史记录功能的场景。
应用场景
需要保存和恢复对象状态的场景例如文本编辑器、操作撤销功能等。需要实现多级撤销操作的场景例如图形编辑器中的多层次撤销操作。需要保存对象历史记录的场景例如编辑器的编辑历史记录。需要实现对象副本功能的场景在特定时候将对象恢复到某个历史状态。
总之备忘录模式提供了一种简单且有效的方法来保存和恢复对象的状态可以在需要保存对象状态的场景中很好地发挥作用。