Не могу разобраться с этим паттерном.
Что я понял:
Receiver - класс, в котором хранятся реализации наших команд.
ConcreteCommand - класс, характеризующий команду, как объект, по сути перенаправляет нас на соответствующую реализацию в Receiver.
А какова роль класса Invoker?
Как я понимаю в простом исполнении: в нем должен быть метод, в который мы передаем команду в качестве аргумента, а он уже вызывает execute() команды. А саму команду создаем/конфигурируем в клиенте.
Тогда возникает вопрос - а зачем он собственно нужен, если мы и в клиенте можем вызвать execute.
Буду благодарен за разъяснения.