Ответ
Паттерн Команда (Command) — это поведенческий паттерн проектирования, который инкапсулирует запрос в виде объекта. Это позволяет параметризовать клиентов с различными запросами, ставить запросы в очередь или поддерживать отмену операций.
Основные компоненты:
- Command (Интерфейс команды): Объявляет метод выполнения (например,
execute()). - ConcreteCommand (Конкретная команда): Реализует интерфейс, связывая действие с получателем.
- Invoker (Инициатор): Инициирует выполнение команды.
- Receiver (Получатель): Объект, который знает, как выполнить само действие.
Пример на Java:
// Command
interface Command {
void execute();
}
// ConcreteCommand
class LightOnCommand implements Command {
private Light light; // Receiver
public LightOnCommand(Light light) { this.light = light; }
@Override
public void execute() { light.turnOn(); }
}
// Invoker
class RemoteControl {
private Command command;
public void setCommand(Command command) { this.command = command; }
public void pressButton() { command.execute(); }
}
// Receiver
class Light {
public void turnOn() { System.out.println("Light is ON"); }
}
Применение и преимущества:
- Отмена и повтор операций (Undo/Redo): Команда может хранить состояние для отката.
- Очереди и планирование задач: Команды можно ставить в очередь или выполнять в разное время.
- Макрокоманды: Создание составных команд из нескольких простых.
- Слабосвязанная архитектура: Инициатор не зависит от конкретных операций получателя.