Skip to main content

Як патерн Command сприяє реалізації функціоналу undo/redo?

Патерн Command (Команда) ідеально підходить для реалізації undo/redo, тому що кожна дія зберігається як об'єкт, який знає, що було зроблено і як це скасувати.


1. Команда інкапсулює операцію та її обернену дію

Кожен об'єкт-команда реалізує два методи:

  • execute() - виконує дію,
  • undo() - скасовує її (відновлює попередній стан).

Кожна команда знає, що змінити і як повернути назад.


2. Зберігання історії команд

Після виконання команда додається в стек історії:

java
Stack<Command> history = new Stack<>(); command.execute(); history.push(command);

Коли потрібно скасувати останню дію:

java
if (!history.isEmpty()) history.pop().undo();

А для redo можна зберігати видалені команди в окремому стеку і повторно викликати execute().


3. Приклад (Java)

java
interface Command { void execute(); void undo(); } class TextEditor { private StringBuilder text = new StringBuilder(); void write(String s) { text.append(s); } void delete(int count) { text.delete(text.length() - count, text.length()); } String getText() { return text.toString(); } } class WriteCommand implements Command { private TextEditor editor; private String text; public WriteCommand(TextEditor editor, String text) { this.editor = editor; this.text = text; } public void execute() { editor.write(text); } public void undo() { editor.delete(text.length()); } }

Використання:

java
TextEditor editor = new TextEditor(); Command cmd = new WriteCommand(editor, "Привіт"); cmd.execute(); cmd.undo();

4. Як це працює

  1. Кожна команда зберігає дані, потрібні для скасування.
  2. Після виконання команда записується в історію.
  3. При undo() викликається метод undo().
  4. При redo() - знову execute().

5. Переваги

  • Не потрібно писати окрему логіку відкату - вона вбудована в команду.
  • Можна робити багаторівневий undo/redo через стек.
  • Код клієнта не знає, як саме виконується або скасовується дія.

Підсумок: Патерн Command робить undo/redo можливим, тому що кожна операція існує як об'єкт з власною історією, який уміє сам себе виконати і скасувати, створюючи гнучку і керовану систему дій.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.