TGViewer
Библиотека собеса по Java | вопросы с собеседований Библиотека собеса по Java | вопросы с собеседований @java_interview_lib · 6.44K subscribers
Post #1341 988
Расскажите о паттерне Command

Command — это поведенческий паттерн, который превращает запрос в отдельный объект, содержащий всю информацию о запросе.

Простыми словами: вместо прямого вызова метода вы создаёте объект-команду, которую можно передать, поставить в очередь, отменить или повторить.

▪️ Пример:

Текстовый редактор с поддержкой undo/redo: каждое действие — объект, который можно откатить.

// Команда
interface Command {
void execute();
void undo();
}

// Получатель
class TextEditor {
private StringBuilder text = new StringBuilder();

public void insert(int pos, String str) {
text.insert(pos, str);
}

public void delete(int pos, int length) {
text.delete(pos, pos + length);
}

public String getText() { return text.toString(); }
}

// Конкретная команда
class InsertCommand implements Command {
private final TextEditor editor;
private final int position;
private final String text;

public InsertCommand(TextEditor editor, int position, String text) {
this.editor = editor;
this.position = position;
this.text = text;
}

public void execute() {
editor.insert(position, text);
}

public void undo() {
editor.delete(position, text.length());
}
}

// Инвокер с историей
class CommandHistory {
private final Deque<Command> history = new ArrayDeque<>();

public void execute(Command cmd) {
cmd.execute();
history.push(cmd);
}

public void undo() {
if (!history.isEmpty()) {
history.pop().undo();
}
}
}

// Использование
TextEditor editor = new TextEditor();
CommandHistory history = new CommandHistory();

history.execute(new InsertCommand(editor, 0, "Hello"));
history.execute(new InsertCommand(editor, 5, " World"));
System.out.println(editor.getText()); // Hello World

history.undo();
System.out.println(editor.getText()); // Hello


▪️ Когда использовать

Нужен undo/redo
Команды нужно ставить в очередь, логировать или выполнять отложенно
Хотите отделить объект, инициирующий операцию, от объекта, выполняющего её

▪️ Минус

Усложняет код: каждая операция — отдельный класс.

🐸 Библиотека собеса по Java

#patterns
  • ❤ 5
  • 👍 3
  • 🔥 1
More from @java_interview_lib
  1. Sep 15, 2026❓ Расскажите о паттерне Facade Facade — это структурный паттерн, который предоставляет про…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Aug 5, 2026❓ Что такое "diamond problem" и как его решает Java? «Diamond problem» возникает при множе…
  4. Aug 5, 2026👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах…
  5. Aug 5, 2026Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
  6. Jul 31, 2026❓ Как работает ConcurrentHashMap? ConcurrentHashMap использует сегментирование / распростр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →