Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Memento:
- def __init__(self, counter):
- self.__counter = counter
- def get_state(self):
- return self.__counter
- def set_state(self, counter):
- self.__counter = counter
- class Originator:
- def __init__(self, counter=0):
- self.__counter = counter
- def increase(self, value=1):
- self.__counter += value
- def get_counter(self):
- return self.__counter
- def create_memento(self):
- return Memento(self.__counter)
- def set_memento(self, memento: Memento):
- self.__counter = memento.get_state()
- class CareTaker:
- def __init__(self, originator: Originator):
- self.originator = originator
- self.mementos = []
- def remember(self):
- self.mementos.append(self.originator.create_memento())
- def go_back(self):
- self.originator.set_memento(self.mementos.pop())
- def wait_day(self):
- self.originator.increase(24)
- def wait_week(self):
- self.originator.increase(168)
- def get_last_memento(self):
- return self.mementos[-1].get_state()
- if __name__ == "__main__":
- clock = Originator()
- delivery = CareTaker(clock)
- delivery.remember()
- print("First:", clock.get_counter())
- delivery.wait_day()
- delivery.remember()
- print("Second:", clock.get_counter())
- delivery.wait_week()
- delivery.remember()
- print("Third:", clock.get_counter())
- delivery.go_back()
- print("Go back once:", clock.get_counter())
- delivery.go_back()
- print("Go back twice:", clock.get_counter())
- print("CareTaker get private state of Originator:", delivery.get_last_memento())
- delivery.go_back()
- print("Go back three times:", clock.get_counter())
Advertisement
Add Comment
Please, Sign In to add comment