Реализации на С++
Memento
Общая реализация на языке С++
# include <iostream>
# include <memory>
# include <list>
using namespace std;class Memento;
class Caretaker
{
public:
unique_ptr<Memento> getMemento();
void setMemento(unique_ptr<Memento> memento);
private:
list<unique_ptr<Memento>> mementos;
};class Originator
{
public:
Originator(int s) : state(s) {}
const int getState() const
{
return state;
}
void setState(int s)
{
state = s;
}
std::unique_ptr<Memento> createMemento()
{
return make_unique<Memento>(*this);
}
void restoreMemento(std::unique_ptr<Memento> memento);
private:
int state;
};int main()
{
auto originator = make_unique<Originator>(1);
auto caretaker = make_unique<Caretaker>();
cout << "State = " << originator->getState() << endl;
caretaker->setMemento(originator->createMemento());
originator->setState(2);
cout << "State = " << originator->getState() << endl;
caretaker->setMemento(originator->createMemento());
originator->setState(3);
cout << "State = " << originator->getState() << endl;
caretaker->setMemento(originator->createMemento());
originator->restoreMemento(caretaker->getMemento());
cout << "State = " << originator->getState() << endl;
originator->restoreMemento(caretaker->getMemento());
cout << "State = " << originator->getState() << std::endl;
originator->restoreMemento(caretaker->getMemento());
cout << "State = " << originator->getState() << std::endl;
}Last updated