Як патерн 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. Як це працює
- Кожна команда зберігає дані, потрібні для скасування.
- Після виконання команда записується в історію.
- При
undo()викликається методundo(). - При
redo()- зновуexecute().
5. Переваги
- Не потрібно писати окрему логіку відкату - вона вбудована в команду.
- Можна робити багаторівневий undo/redo через стек.
- Код клієнта не знає, як саме виконується або скасовується дія.
Підсумок:
Патерн Command робить undo/redo можливим,
тому що кожна операція існує як об'єкт з власною історією,
який уміє сам себе виконати і скасувати,
створюючи гнучку і керовану систему дій.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.