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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top