Паттерн "Команда" в Java — undo в редакторе и очередь действий
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — о разделе.
Обзор — в поведенческих паттернах. Практика на C# (MediatR, ICommand) — в Команда в C#. Здесь — классическая Command на Java с undo/redo.
Play ITЗагрузка интерактивного демо…
Задача паттерна
Command превращает запрос в объект с методами execute() и при необходимости undo(). Такой объект можно передать, поставить в очередь, залогировать или отменить.
Пример — текстовый редактор
Код ITЗагрузка примера кода…
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
Command в Java-экосистеме
| Место | Как проявляется Command |
|---|---|
Swing Action | Объект действия с actionPerformed |
| JUnit / TestNG | Иногда оборачивают шаги в команды |
| CQRS | CreateOrderCommand как DTO намерения (см. интеграционные паттерны) |
В Spring Boot для HTTP-команд чаще используют сервисные методы или MediatR-подобные библиотеки; учебная схема Command + Handler на C# — в Паттерн "Команда" в C# — объекты действий, а не методы.
Когда применять и риски
| Ситуация | Command |
|---|---|
| Undo/redo | Каждое действие — класс с обратимой логикой |
| Очередь, отложенное выполнение | Команда сериализуется и уходит в worker |
| Макросы | Список команд выполняется подряд |
Минус — много мелких классов. Для одного вызова сервиса достаточно метода без паттерна.
Откат через полный снимок состояния — Memento.
См. также
- Поведенческие паттерны — Команда
- Команда в C#
- Мементо в Java
- очередь команд и фоновые задачи — брокеры