Si está pasando diferentes tipos de comandos, Invoker
es útil. Puede usar el mismo Invoker para la ejecución de diferentes comandos concretos. En un nodo diferente, etiquetar Receiver
con ConcreteCommand
en lugar de Invoker
permite un acoplamiento flojo. El Receiver
puede cambiar el nombre del método (por ejemplo SwitchON a swithcOnTV) como en este ejemplo:
Post relacionados: Using Command Design pattern
Para entender el propósito de Invoker
, me gustaría hacer referencia este article el restaurante & Casos de uso del centro de servicio del automóvil.
El camarero (Invoker
) toma la orden del Customer
en su libreta. El Order
se pone en cola para la orden de cocción y se dirige al cocinero (Receiver
) donde se procesa.
El cliente es el Customer
. Él envía su solicitud al Receiver
a través del camarero, que es el Invoker
. El camarero encapsula el comando (el orden en este caso) escribiéndolo en el cheque y luego lo coloca, creando el objeto ConcreteCommand
que es el comando mismo.
El Receiver
será el cocinero que, después de completar el trabajo en todos los pedidos que se le enviaron antes del comando en cuestión, comienza a trabajar en él.
Otro aspecto notable del ejemplo es el hecho de que el panel para los pedidos no admite únicamente los pedidos del menú, por lo que puede admitir comandos para cocinar muchos elementos diferentes.
Tengo ejemplo, en Java, que puede ser útil para entender los conceptos: http://stackoverflow.com/questions/35276941/how-commnd-pattern-decouples-the-sender-from-reciever –