备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便日后可以将对象恢复到原先保存的状态。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//备忘录类,用于保存对象的状态
class Memento {
public:
(const string& state) :state_(state) {
Memento
}
()const {
string GetStatereturn state_;
}
private:
state_;
string };
//需要保存状态的对象
class Originator {
public:
void SetState(const string& state) {
state_ = state;
}
()const {
string GetStatereturn state_;
}
//创建备忘录,保存当前状态
()const {
Memento CreateMementoreturn Memento(state_);
}
//恢复状态
void RestoreMemento(const Memento& memento) {
state_ = memento.GetState();
}
private:
state_;
string };
//Memeto Mgr
class Caretaker {
public:
void AddMemento(const Memento& memento) {
mementos_.push_back(memento);
}
(int index)const {
Memento GetMementoreturn mementos_[index];
}
private:
<Memento>mementos_;
vector};
int main()
{
;
Originator originator;
Caretaker caretaker.SetState("State 1");
originator<< originator.GetState() << endl;//State 1
cout .AddMemento(originator.CreateMemento());
caretaker.SetState("State 2");
originator.AddMemento(originator.CreateMemento());
caretaker.SetState("State 3");
originator.AddMemento(originator.CreateMemento());
caretaker<< originator.GetState() << endl;//State 3
cout //rollback
.RestoreMemento(caretaker.GetMemento(0));
originator<< originator.GetState() << endl;//State 1
cout return 0;
}
这证明了备忘录模式的有效性,通过备忘录模式,我们可以在不破坏对象封装性的前提下保存和恢复对象的内部状态。