from abc import ABC, abstractmethod class IMemento(ABC): @abstractmethod def get_state(self): pass class Memento(IMemento): """Класс Снимок, который хранит состояние объекта.""" def __init__(self, state): self._state = state def get_state(self): return self._state class TextEditor: """Класс текстового редактора, который изменяет свое состояние.""" def __init__(self): self._text = "" def write(self, text): self._text += text def get_text(self): return self._text def save(self): """Сохраняем текущее состояние в снимок.""" return Memento(self._text) def restore(self, memento): """Восстанавливаем состояние из снимка.""" self._text = memento.get_state() class Caretaker: """Класс Хранитель, который управляет сохранением и восстановлением снимков.""" def __init__(self): self._mementos = [] def save_memento(self, memento): self._mementos.append(memento) def get_memento(self, index): return self._mementos[index] editor, caretaker = TextEditor(), Caretaker() # Пишем текст и сохраняем состояние editor.write("Hello, ") caretaker.save_memento(editor.save()) editor.write("world!") caretaker.save_memento(editor.save()) print("Текущий текст:", editor.get_text()) # Вывод: Hello, world! # Восстанавливаем предыдущее состояние editor.restore(caretaker.get_memento(0)) print("После восстановления:", editor.get_text()) # Вывод: Hello,