Patrón de comandos: Cliente y invocador
-
23-08-2019 - |
Pregunta
En el patrón de comando:
¿Por qué no debe ser el participante cliente la misma clase que el participante invocador? ¿Hay posibles escenarios cuando el participante cliente y el participante invocador puede ser la misma clase?
Solución
La mayor razón es que viola el principio incumba la responsabilidad individual. El participante Client y particpant Invoker ambos tienen RESPONSABILIDADES individuales y un cambio en uno afecta a la otra.
Otros consejos
1) La responsabilidad primordial de cliente es instanciation adecuado de invocador, el receptor y objetos de comando y luego iniciar el procedimiento de ejecución en el lugar y momento adecuado.
Podría ser, por ejemplo, ser algo como esto
class Client {
...
invoker.executeCommand()
...
}
2) La responsabilidad primordial de invocador es invocar uno o más comandos-métodos de Comando de objetos en un orden particular.
Por ejemplo,
class Invoker {
...
command.command1();
command.command2();
command.command3();
...
}
Vamos a considerar, por ejemplo, la clase java.awt.event.KeyListener. Tiene tres métodos que se invoca en el siguiente orden:
keyPressed(KeyEvent e)
keyTyped(KeyEvent e)
keyReleased(KeyEvent e)
clase de invocador para este oyente podría ser:
class KeyInvocation {
KeyListener listener;
void invokeKey(EventObject e) {
listener.keyPressed(e);
listener.keyTyped(e);
listener.keyReleased(e);
}
}
clase Mientras tanto cliente debe instanciar adecuada EventObject, KeyListener y KeyInvocation y luego ejecutar en el método invokeKey lugar y tiempo adecuado.
De Invoker curso es una capa adicional de patrón de comandos. En el caso más simple del patrón de comando podemos faltar a clase invocador en todo y hacer todo el trabajo en un solo cliente.