Domanda

Nel modello di comando:

Perché non dovrebbe partecipante cliente essere la stessa classe del partecipante invoca? C'è possibili scenari in cui il partecipante client e il partecipante invoker può essere la stessa classe?

È stato utile?

Soluzione

Il più grande motivo è che viola il principio singolo responsiblity. Il partecipante Cliente e Invoker particpant entrambi hanno individuali responsibilties e una modifica a uno interesserà l'altro.

Altri suggerimenti

1) la responsabilità principale per il client è quello di una corretta instanciation di Invoker, ricevitore e gli oggetti Command e quindi avviare procedura di esecuzione in luogo e di tempo adeguato.

Si potrebbe, per esempio, essere qualcosa di simile

class Client {

...

invoker.executeCommand()

...

}

2) la responsabilità principale di Invoker è invocare uno o più comandi-metodi di Command oggetto in ordine particolare.

Ad esempio,

class Invoker {

...
command.command1();
command.command2();
command.command3();
...

}

Si consideri, ad esempio, la classe java.awt.event.KeyListener. Ha tre metodi che è invocata nella seguente ordine:

keyPressed(KeyEvent e)
keyTyped(KeyEvent e)
keyReleased(KeyEvent e)

class Invoker per questo ascoltatore potrebbe essere:

class KeyInvocation {
    KeyListener listener;

    void invokeKey(EventObject e) {
        listener.keyPressed(e);
        listener.keyTyped(e);
        listener.keyReleased(e);
    }
}
Classe

Nel frattempo client dovrebbe corretta instanciate EventObject, KeyListener e KeyInvocation e quindi eseguire nella corretta metodo invokeKey luogo e tempo.

Naturalmente Invoker è uno strato aggiuntivo di modello di comando. Nel caso più semplice del modello di comando possiamo saltare classe Invoker a tutti e fare tutto il lavoro in un client.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top