NikolayAlb
@NikolayAlb

Какова роль 'Invoker' в паттерне Команда?

Не могу разобраться с этим паттерном.
59802adeac5d40f08e893b8353cd593e.gif
Что я понял:
Receiver - класс, в котором хранятся реализации наших команд.
ConcreteCommand - класс, характеризующий команду, как объект, по сути перенаправляет нас на соответствующую реализацию в Receiver.

А какова роль класса Invoker?

Как я понимаю в простом исполнении: в нем должен быть метод, в который мы передаем команду в качестве аргумента, а он уже вызывает execute() команды. А саму команду создаем/конфигурируем в клиенте.
Тогда возникает вопрос - а зачем он собственно нужен, если мы и в клиенте можем вызвать execute.

Буду благодарен за разъяснения.
  • Вопрос задан
  • 342 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
Reciver - Содержит в себе набор некой функциональности
Command - Содержит в себе алгоритм реализации определенного действия, с помощью использования функциональности заложенной в Reciver
Client - Знает как создать команду и какой Reciver ей подсунуть
Invoker - Выполняет конкретную команду

Тогда возникает вопрос - а зачем он собственно нужен, если мы и в клиенте можем вызвать execute.

Во первых не всегда бывает что команда вызывается там где создается. Во вторых Invoker содержит механизмы выполнения всех команд, т.е. в нем например может быть форматирование результата выполнения команд и прочие действия связанные с выполнением ВСЕХ команд приложения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы