Вопрос проверяет понимание паттерна проектирования «Команда» и его применения для инкапсуляции запросов в объекты, что полезно для реализации отмены/повтора действий и очередей задач во фронтенде.
Паттерн «Команда» (Command) — это поведенческий паттерн проектирования, который превращает запрос в самостоятельный объект. Этот объект содержит все необходимые данные для выполнения действия: ссылку на получателя, параметры и метод выполнения. Такой подход отделяет отправителя запроса от его исполнителя, что даёт гибкость в управлении операциями.
Основные участники паттерна:
Рассмотрим простой редактор текста с возможностью отмены действий:
class Command {
execute() {}
undo() {}
}
class InsertTextCommand extends Command {
constructor(receiver, text) {
super();
this.receiver = receiver;
this.text = text;
}
execute() {
this.receiver.insert(this.text);
}
undo() {
this.receiver.deleteLast(this.text.length);
}
}
class TextEditor {
constructor() {
this.content = '';
this.history = [];
}
insert(text) {
this.content += text;
}
deleteLast(n) {
this.content = this.content.slice(0, -n);
}
executeCommand(command) {
command.execute();
this.history.push(command);
}
undo() {
const command = this.history.pop();
if (command) command.undo();
}
}
const editor = new TextEditor();
editor.executeCommand(new InsertTextCommand(editor, 'Hello'));
editor.executeCommand(new InsertTextCommand(editor, ' World'));
console.log(editor.content); // 'Hello World'
editor.undo();
console.log(editor.content); // 'Hello'Паттерн «Команда» полезен, когда нужно отделить инициирование операции от её выполнения, особенно если требуется поддержка отмены, логирования или постановки в очередь. Во фронтенде он незаменим для создания интерактивных интерфейсов с историей действий и гибким управлением пользовательскими операциями.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию