mirror of
https://github.com/JakubVojvoda/design-patterns-cpp.git
synced 2025-12-17 12:54:36 +03:00
fix Memento pattern
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user