Untitled
unknown
plain_text
a year ago
2.0 kB
6
Indexable
class Memento: def __init__(self, state: str): self._state = state def get_state(self) -> str: return self._state class TextEditor: def __init__(self): self._content = "" def add_text(self, text: str) -> None: self._content += text def delete_text(self, num_chars: int) -> None: self._content = self._content[:-num_chars] def save(self) -> Memento: return Memento(self._content) def restore(self, memento: Memento) -> None: self._content = memento.get_state() def get_text(self) -> str: return self._content class Caretaker: def __init__(self, editor: TextEditor): self._editor = editor self._history = [] self._redo_stack = [] def save(self) -> None: self._history.append(self._editor.save()) self._redo_stack.clear() # Clear redo stack on new save def undo(self) -> None: if not self._history: return # Save current state for redo self._redo_stack.append(self._editor.save()) # Restore last saved state memento = self._history.pop() self._editor.restore(memento) def redo(self) -> None: if not self._redo_stack: return # Save current state for undo self._history.append(self._editor.save()) # Restore last undone state memento = self._redo_stack.pop() self._editor.restore(memento) # Example Usage: editor = TextEditor() caretaker = Caretaker(editor) editor.add_text("Hello") caretaker.save() editor.add_text(" World") caretaker.save() editor.delete_text(5) caretaker.save() print(editor.get_text()) # Output: "Hello" caretaker.undo() print(editor.get_text()) # Output: "Hello World" caretaker.undo() print(editor.get_text()) # Output: "Hello" caretaker.redo() print(editor.get_text()) # Output: "Hello World"
Editor is loading...
Leave a Comment