fix Memento pattern

This commit is contained in:
Jakub Vojvoda
2016-11-08 20:15:42 +01:00
parent 99ff2deccf
commit c45c279fd9

View File

@@ -47,6 +47,7 @@ class Originator {
public: public:
// implemented only for printing purpose // implemented only for printing purpose
void setState(int s) { void setState(int s) {
std::cout << "Set state to " << s << "." << std::endl;
state = s; state = s;
} }
@@ -85,11 +86,13 @@ public:
} }
void save() { void save() {
std::cout << "Save state." << std::endl;;
history.push_back(originator->createMemento()); history.push_back(originator->createMemento());
} }
void undo() { void undo() {
originator->setMemento(history.front()); std::cout << "Undo state." << std::endl;;
originator->setMemento(history.back());
history.pop_back(); history.pop_back();
} }
// ... // ...
@@ -108,14 +111,14 @@ int main()
originator->setState(1); originator->setState(1);
caretaker->save(); caretaker->save();
std::cout << "Set state: " << originator->getState() << std::endl;
originator->setState(2); originator->setState(2);
caretaker->save(); caretaker->save();
std::cout << "Set state: " << originator->getState() << std::endl;
originator->setState(3);
caretaker->undo(); caretaker->undo();
std::cout << "Undo state: " << originator->getState() << std::endl;
std::cout << "Actual state is " << originator->getState() << "." << std::endl;
delete originator; delete originator;
delete caretaker; delete caretaker;