Назад к вопросам
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): Сохранение состояния команд для их отмены.
  • Логирования операций: Запись истории выполненных команд.