Middle
70
questionbank

Что такое паттерн 'Команда' (Command)?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Поведенческий паттерн проектирования, который превращает запрос в отдельный объект, содержащий всю информацию о запросе. Это позволяет параметризовать методы объектов с различными запросами, ставить запросы в очередь или протоколировать их, а также поддерживает отмену операций.

Основные элементы паттерна:

  • Команда (Command): Абстрактный класс или интерфейс, объявляющий метод для выполнения запроса.
    python
  • Конкретная Команда (Concrete Command): Реализует интерфейс Command и связывает приемник с действием. Определяет набор действий, которые должны быть выполнены на приемнике.
    python
  • Приемник (Receiver): Класс, который знает, как выполнить фактическую работу. В нашем примере это Light.
    python
  • Инициатор (Invoker): Объект, который запрашивает у команды выполнение действия. Не знает о конкретной команде или приемнике.
    python
  • Клиент (Client): Создает объекты Concrete Command и связывает их с Receiver. Затем передает команду в Invoker.
    python

Преимущества:

  • Разделяет инициатор и приемник команды.
  • Позволяет параметризовать инициатор различными командами.
  • Облегчает реализацию отмены/повтора операций (путем сохранения истории команд).
  • Позволяет построить очереди команд и протоколировать их выполнение.

Недостатки:

  • Может привести к большому количеству классов, если много команд.