原文地址:https://blog.csdn.net/qq_33232152/article/details/94325685
对代码做出修改
//将每一种状态即设置的string封装成类Memento,想回到哪种状态,就返回到哪个Memento
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Memento {
public:
Memento(string tstate):state_(tstate) {}
~Memento() {}
string getState() {
return state_;
}
private:
string state_;
};
class Originator {
public:
Originator() {}
~Originator() {}
void setState(string tstate) { state_ = tstate; }
string getState() {
return state_;
}
Memento* saveStateToMemento() {
return new Memento(state_);
}
void getStateFromMemento(Memento *Memento) {
state_ = Memento->getState();
}
private:
string state_;
};
class CareTaker {
public:
CareTaker() {}
~CareTaker() {
vector<Memento*>::iterator it;
for (it = memento_lsit_.begin(); it != memento_lsit_.end(); ++it) {
delete (*it);
(*it) = NULL;
}
}
void add(Memento *state) {
memento_lsit_.push_back(state);
}
Memento* get(int index) {
return memento_lsit_[index];
}
private:
vector<Memento*> memento_lsit_;
};
int main(){
Originator *originator = new Originator();
CareTaker *careTaker = new CareTaker();
originator->setState("State #1");
originator->setState("State #2");
careTaker->add(originator->saveStateToMemento());
originator->setState("State #3");
careTaker->add(originator->saveStateToMemento());
originator->setState("State #4");
cout<<"Current State: " << originator->getState()<<endl;
originator->getStateFromMemento(careTaker->get(0));
cout<<"First saved State: " << originator->getState() << endl;
originator->getStateFromMemento(careTaker->get(1));
cout << "Second saved State: " << originator->getState() << endl;
delete originator;
originator = NULL;
delete careTaker;
careTaker = NULL;
}
输出结果:
Current State: State #4
First saved State: State #2
Second saved State: State #3