Що робить патерн 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.