JavaScript Comando


Esempio

Il modello di comando incapsula i parametri in un metodo, lo stato corrente dell'oggetto e quale metodo chiamare. È utile compartimentare tutto ciò che è necessario per chiamare un metodo in un secondo momento. Può essere utilizzato per emettere un "comando" e decidere in seguito quale parte di codice utilizzare per eseguire il comando.

Ci sono tre componenti in questo modello:

  1. Comando Messaggio: il comando stesso, incluso il nome del metodo, i parametri e lo stato
  2. Invoker: la parte che indica al comando di eseguire le sue istruzioni. Può essere un evento a tempo, l'interazione dell'utente, un passaggio in un processo, una richiamata o qualsiasi modo necessario per eseguire il comando.
  3. Ricevitore - l'obiettivo dell'esecuzione del comando.

Messaggio di comando come matrice

var aCommand = new Array();
aCommand.push(new Instructions().DoThis);  //Method to execute
aCommand.push("String Argument");  //string argument
aCommand.push(777);                //integer argument
aCommand.push(new Object {} );     //object argument
aCommand.push(new Array() );       //array argument

Costruttore per la classe di comando

class DoThis {
    constructor( stringArg, numArg, objectArg, arrayArg ) {
        this._stringArg = stringArg;
        this._numArg = numArg;
        this._objectArg = objectArg;
        this._arrayArg = arrayArg;
    }
    Execute() {
       var receiver = new Instructions();
       receiver.DoThis(this._stringArg, this._numArg, this._objectArg, this._arrayArg );
    }
}     

invoker

aCommand.Execute();  

Può invocare:

  • subito
  • in risposta a un evento
  • in una sequenza di esecuzione
  • come una risposta callback o in una promessa
  • alla fine di un ciclo di eventi
  • in qualsiasi altro modo necessario per invocare un metodo

Ricevitore

class Instructions {
    DoThis( stringArg, numArg, objectArg, arrayArg ) {
        console.log( `${stringArg}, ${numArg}, ${objectArg}, ${arrayArg}` );
    }
}

Un client genera un comando, lo passa a un invocatore che lo esegue immediatamente o ritarda il comando, quindi il comando agisce su un ricevitore. Il pattern di comando è molto utile se usato con pattern companion per creare pattern di messaggistica.