Подробнее на 👉 refactoring.guru
#include <iostream>
// Memento
class Memento {
private:
std::string state;
public:
Memento(const std::string& state) : state(state) {}
std::string getState() const { return state; }
};
// Оригинатор
class Originator {
private:
std::string state;
public:
void setState(const std::string& state) { this->state = state; }
std::string getState() const { return state; }
Memento createMemento() const { return Memento(state); }
void restoreMemento(const Memento& memento) { state = memento.getState(); }
};
// Caretaker
class Caretaker {
private:
Memento memento;
public:
Caretaker(const Memento& memento) : memento(memento) {}
void saveState(const Originator& originator) {
memento = originator.createMemento();
}
void restoreState(Originator& originator) {
originator.restoreMemento(memento);
}
};
// Клиентский код
int main() {
Originator originator;
Memento memento("Состояние 1");
Caretaker caretaker(memento);
originator.setState("Состояние 2");
std::cout << "Текущее состояние оригинатора: " << originator.getState() << std::endl;
caretaker.restoreState(originator);
std::cout << "Восстановленное состояние оригинатора: " << originator.getState() << std::endl;
return 0;
}
Будет напечатано:
Текущее состояние оригинатора: Состояние 2 Восстановленное состояние оригинатора: Состояние 1
class Memento {
final String state;
Memento(this.state);
}
class Originator {
String state;
Originator(this.state);
Memento createMemento() {
return Memento(state);
}
void restoreMemento(Memento memento) {
state = memento.state;
}
}
class Caretaker {
late Memento memento;
void saveState(Originator originator) {
memento = originator.createMemento();
}
void restoreState(Originator originator) {
originator.restoreMemento(memento);
}
}
void main() {
var originator = Originator('Состояние 1');
var caretaker = Caretaker();
caretaker.saveState(originator);
originator.state = 'Состояние 2';
print('Текущее состояние оригинатора: ${originator.state}');
caretaker.restoreState(originator);
print('Восстановленное состояние оригинатора: ${originator.state}');
}
Будет напечатано:
Текущее состояние оригинатора: Состояние 2 Восстановленное состояние оригинатора: Состояние 1