Aliaksei_Yafremau

Memento

Jul 10th, 2025
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.76 KB | None | 0 0
  1. class Memento:
  2.     def __init__(self, counter):
  3.         self.__counter = counter
  4.  
  5.     def get_state(self):
  6.         return self.__counter
  7.  
  8.     def set_state(self, counter):
  9.         self.__counter = counter
  10.  
  11.  
  12. class Originator:
  13.     def __init__(self, counter=0):
  14.         self.__counter = counter
  15.  
  16.     def increase(self, value=1):
  17.         self.__counter += value
  18.  
  19.     def get_counter(self):
  20.         return self.__counter
  21.  
  22.     def create_memento(self):
  23.         return Memento(self.__counter)
  24.  
  25.     def set_memento(self, memento: Memento):
  26.         self.__counter = memento.get_state()
  27.  
  28.  
  29. class CareTaker:
  30.     def __init__(self, originator: Originator):
  31.         self.originator = originator
  32.         self.mementos = []
  33.  
  34.     def remember(self):
  35.         self.mementos.append(self.originator.create_memento())
  36.  
  37.     def go_back(self):
  38.         self.originator.set_memento(self.mementos.pop())
  39.  
  40.     def wait_day(self):
  41.         self.originator.increase(24)
  42.  
  43.     def wait_week(self):
  44.         self.originator.increase(168)
  45.  
  46.     def get_last_memento(self):
  47.         return self.mementos[-1].get_state()
  48.  
  49.  
  50. if __name__ == "__main__":
  51.     clock = Originator()
  52.     delivery = CareTaker(clock)
  53.  
  54.     delivery.remember()
  55.     print("First:", clock.get_counter())
  56.  
  57.     delivery.wait_day()
  58.  
  59.     delivery.remember()
  60.     print("Second:", clock.get_counter())
  61.  
  62.     delivery.wait_week()
  63.  
  64.     delivery.remember()
  65.     print("Third:", clock.get_counter())
  66.  
  67.     delivery.go_back()
  68.     print("Go back once:", clock.get_counter())
  69.  
  70.     delivery.go_back()
  71.     print("Go back twice:", clock.get_counter())
  72.  
  73.     print("CareTaker get private state of Originator:", delivery.get_last_memento())
  74.  
  75.     delivery.go_back()
  76.     print("Go back three times:", clock.get_counter())
  77.  
Advertisement
Add Comment
Please, Sign In to add comment