PassFront
  1. PassFront
  2. База знаний
  3. Поведенческие паттерны

Что такое паттерн Command и что даёт упаковка запроса в объект?

Поведенческие паттерны

Command превращает запрос в объект: операцию со всеми параметрами можно хранить, передавать, ставить в очередь, логировать и отменять.

Устройство

  • Интерфейс Command с методами execute() и undo(); конкретная команда хранит получателя и аргументы.
  • Invoker просто вызывает execute() — он не знает ни операции, ни получателя: связанность минимальна.

Что даёт объектность

  • Undo и redo: стек выполненных команд с обратными операциями.
  • Очереди и отложенное выполнение: задачи для воркеров, макросы (команда из команд — это уже Composite).
  • Логирование и повтор: журнал команд восстанавливает состояние после сбоя — event sourcing в миниатюре.

Где встречается

Пункты меню и горячие клавиши в редакторах, job-очереди фоновых задач (сериализованные команды), сценарии умного дома.

Минус

Рост числа классов: на каждую операцию по классу — в простых случаях достаточно функции-обработчика.

Коротко для собеседования

Command делает из вызова объект с данными и методом execute(), поэтому операции можно откладывать, ставить в очередь, логировать и отменять. Незаменим для undo/redo и job-очередей, но в простых случаях класс на каждую операцию избыточен — хватает функции.

Другие вопросы раздела