Если вы передаете команды другого типа, Invoker
полезно. Вы можете использовать один и тот же Invoker для выполнения разных конкретных команд. На другом узле пометка Receiver
с ConcreteCommand
вместо Invoker
позволяет слабую связь. Receiver
может изменить имя метода (например, switchOn на swithcOnTV), как в этом примере:
Связанный пост: Использование шаблона Command Design
Чтобы понять цель Invoker
, я бы хотел, чтобы вы направили эту статью на случаи использования в ресторане и автосервисе.
Официант (Invoker
) принимает заказ от Customer
на своем планшете. Затем Order
ставится в очередь для повара заказа и попадает к повару (Receiver
), где он обрабатывается.
Клиент - Customer
. Он посылает свой запрос в Receiver
через официанта, который является Invoker
. Официант инкапсулирует команду (порядок в данном случае), записывая ее в чек, а затем помещает ее, создавая объект ConcreteCommand
, который является самой командой.
Receiver
будет поваром, который после завершения работы над всеми заказами, которые были отправлены ему до того, как рассматриваемая команда начнет работу над ним.
Другим заметным аспектом примера является тот факт, что панель для заказов не поддерживает только заказы из меню, поэтому она может поддерживать команды для приготовления множества различных элементов.