备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象 提供一个可回滚的操作
为了节约内存,可使用原型模式+备忘录模式
// 存实际对象的备份状态的对象
class Memento {
private:
string status;
public:
Memento(string status) {
this->status = status;
}
string GetStatus() {
return this->status;
}
};
// 实际用的对象
class Originator {
private:
string state;
public:
void SetState(string status) {
this->state = status;
}
string GetState() {
return state;
}
Memento *SaveStateToMento() {
return new Memento(state);
}
void GetStateFromMemento(Memento memento) {
this->state = memento.GetStatus();
}
};
// 负责从Memento中恢复状态
class CareTaker {
private:
// 该处可结合原型模式,减少内存占用
vector<Memento> vector;
public:
void Add(Memento memento) {
vector.emplace_back(memento);
}
Memento Get(int index) {
return vector[index];
}
};
int main() {
Originator *originator = new Originator;
CareTaker *careTaker = new CareTaker;
// 状态1
originator->SetState("status1");
// 状态2
originator->SetState("status2");
careTaker->Add(*originator->SaveStateToMento());
// 状态3
originator->SetState("status3");
careTaker->Add(*originator->SaveStateToMento());
originator->SetState("status4");
cout << "current state" << originator->GetState() << endl;
// 恢复状态2
originator->GetStateFromMemento(careTaker->Get(0));
cout << "current state" << originator->GetState() << endl;
// 恢复状态3
originator->GetStateFromMemento(careTaker->Get(1));
cout << "current state" << originator->GetState() << endl;
}