Назад к вопросам
Middle+
74
questionbank
Что такое паттерн 'Команда' (Command)?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Паттерн "Команда" (Command) - это поведенческий паттерн проектирования, который превращает запрос в самостоятельный объект, который содержит всю информацию об этом запросе. Такое преобразование позволяет:
- Параметризовать клиентские объекты различными запросами
- Ставить запросы в очередь или логировать их
- Поддерживать отмену операций
Основные участники паттерна:
- Команда (Command): Объявляет интерфейс для выполнения операции.
- Конкретная команда (Concrete Command): Реализует интерфейс
Commandи определяет привязку между получателем и действием. Выполняет действие, вызывая методы получателя. - Получатель (Receiver): Класс, который знает, как выполнить необходимые действия.
- Инициатор (Invoker): Объект, который запрашивает выполнение команды. Не знает ничего о конкретной команде или получателе.
# Интерфейс команды
class Command:
def execute(self):
pass
# Конкретная команда
class ConcreteCommand(Command):
def __init__(self, receiver, argument):
self._receiver = receiver # Получатель
self._argument = argument
def execute(self):
self._receiver.action(self._argument)
# Получатель
class Receiver:
def action(self, arg):
print(f"Выполняется действие с аргументом: {arg}")
# Инициатор
class Invoker:
def set_command(self, command):
self._command = command
def execute_command(self):
self._command.execute()
# Пример использования
receiver = Receiver()
command = ConcreteCommand(receiver, "Hello, Command!")
invoker = Invoker()
invoker.set_command(command)
invoker.execute_command()
Паттерн "Команда" полезен при необходимости:
- Отложенного выполнения операций: Возможность выполнения команд в будущем.
- Очереди команд: Построение последовательности команд для выполнения.
- Отмены операций (undo): Сохранение состояния команд для их отмены.
- Логирования операций: Запись истории выполненных команд.