Skip to main content

Що робить патерн Command і навіщо він потрібен?

Command (Команда) - це поведінковий патерн, який перетворює запит або дію на окремий об'єкт, що інкапсулює всю інформацію, необхідну для його виконання.


1. Суть ідеї

Замість того щоб викликати методи напряму, програма створює об'єкт-команду, який зберігає:

  • посилання на отримувача (об'єкт, який виконає дію),
  • саму дію,
  • і необхідні параметри.

Такий об'єкт можна передавати, ставити в чергу, скасовувати або повторювати - усе без знання того, як саме виконується операція.

Ідея: "упакувати дію в об'єкт".


2. Навіщо потрібен

  • Щоб відокремити запит від його виконавця.
  • Щоб можна було відкласти виконання, поставити в чергу або скасувати дію.
  • Щоб реалізувати історію операцій, макроси, "undo/redo", транзакції.

3. Структура

  • Command - інтерфейс з методом execute().
  • ConcreteCommand - конкретна команда, викликає потрібний метод у отримувача.
  • Receiver - об'єкт, який знає, як виконати дію.
  • Invoker - ініціатор, який викликає команду (наприклад, кнопка).
  • Client - створює команду і передає її ініціатору.

4. Приклад (Java)

java
interface Command { void execute(); } class Light { void turnOn() { System.out.println("Світло увімкнено"); } void turnOff() { System.out.println("Світло вимкнено"); } } class TurnOnCommand implements Command { private Light light; public TurnOnCommand(Light light) { this.light = light; } public void execute() { light.turnOn(); } } class RemoteControl { private Command command; public void setCommand(Command command) { this.command = command; } public void pressButton() { command.execute(); } } // Використання Light light = new Light(); Command on = new TurnOnCommand(light); RemoteControl remote = new RemoteControl(); remote.setCommand(on); remote.pressButton();

5. Переваги

  • Дозволяє відокремити клієнта від логіки виконання.
  • Підтримує черги, історію, undo/redo.
  • Спрощує додавання нових команд без зміни наявного коду.
  • Підходить для GUI-кнопок, меню, планувальників завдань.

Висновок

Command потрібен, щоб представити дію у вигляді об'єкта, який можна виконувати, скасовувати, логувати і комбінувати, роблячи тим самим систему гнучкою, розширюваною і керованою в часі.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.