Padrão comando: Cliente e Invoker
-
23-08-2019 - |
Pergunta
No padrão de comando:
Por que o participante cliente não deve ser a mesma classe que o participante chamador? Existe cenários possíveis quando o participante cliente e o participante chamador pode ser a mesma classe?
Solução
A maior razão é que ela viola o princípio responsiblity única. O participante Cliente e Invoker PARTICIPANTE ambos têm responsibilties individuais e uma mudança para um vai afetar o outro.
Outras dicas
1) a responsabilidade principal de Cliente é instanciação adequada de Invoker, Receiver e objetos de comando e, em seguida, iniciar o processo de execução no lugar e momento adequado.
Ele poderia, por exemplo, ser algo como isto
class Client {
...
invoker.executeCommand()
...
}
2) a responsabilidade principal de Invoker é invocar um ou mais métodos de comando-de objeto de comando, a fim particular.
Por exemplo,
class Invoker {
...
command.command1();
command.command2();
command.command3();
...
}
Vamos considerar, por exemplo, classe java.awt.event.KeyListener. Ele tem três métodos que são invocados na seguinte ordem:
keyPressed(KeyEvent e)
keyTyped(KeyEvent e)
keyReleased(KeyEvent e)
classe Invoker para este ouvinte poderia ser:
class KeyInvocation {
KeyListener listener;
void invokeKey(EventObject e) {
listener.keyPressed(e);
listener.keyTyped(e);
listener.keyReleased(e);
}
}
classe Cliente Enquanto isso deve instanciar adequada EventObject, KeyListener e KeyInvocation e depois executar no método invokeKey tempo devido lugar e.
É claro Invoker é uma camada adicional de padrão de comando. No caso mais simples de padrão de comando que pode pular classe Invoker em tudo e fazer todo o trabalho em um cliente.