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