design-patterns/behavioral/memento/caretaker.py
Ruidy bf1d5dd7f0
Memento (#19)
* doc: add documentation

* doc: update general documentation

* add code example
2020-10-03 20:45:32 +02:00

34 lines
1 KiB
Python

from behavioral.memento.originator import Originator
class Caretaker:
"""
The Caretaker doesn't depend on the Concrete Memento class. Therefore, it
doesn't have access to the originator's state, stored inside the memento. It
works with all mementos via the base Memento interface.
"""
def __init__(self, originator: Originator) -> None:
self._memento = []
self._originator = originator
def backup(self) -> None:
print("\nCaretaker: Saving Originator's state...")
self._memento.append(self._originator.save())
def undo(self) -> None:
if not self._memento:
return
memento = self._memento.pop()
print(f"Caretaker: Restoring state to: {memento.get_name()}")
try:
self._originator.restore(memento)
except Exception:
self.undo()
def show_history(self) -> None:
print("Caretaker: Here's the list of mementos:")
for memento in self._memento:
print(memento.get_name())