Ricerca…


Esempio di modello di comando in Java

definizione di wikipedia :

Il modello di comando è un modello di progettazione comportamentale in cui un oggetto viene utilizzato per incapsulare tutte le informazioni necessarie per eseguire un'azione o attivare un evento in un secondo momento

Diagramma UML da dofactory :

inserisci la descrizione dell'immagine qui

Componenti di base e flusso di lavoro:

  1. Command dichiara un'interfaccia per comandi astratti come execute()
  2. Receiver sa come eseguire un particolare comando
  3. Invoker detiene ConcreteCommand , che deve essere eseguito
  4. Client crea ConcreteCommand e assegnare Receiver
  5. ConcreteCommand definisce il binding tra Command e Receiver

In questo modo, Command pattern disaccoppia Sender (Client) dal Receiver tramite Invoker . Invoker ha una conoscenza completa di cui comando da eseguire e di comando sa quale ricevitore da richiamare per eseguire una particolare operazione.

Snippet di codice:

interface Command {
    void execute();
}
class Receiver {
    public void switchOn(){
        System.out.println("Switch on from:"+this.getClass().getSimpleName());
    }
}
class OnCommand implements Command{
    private Receiver receiver;

    public OnCommand(Receiver receiver){
        this.receiver = receiver;
    }
    public void execute(){
        receiver.switchOn();
    }
}
class Invoker {
    private Command command;
  
    public Invoker(Command command){
        this.command = command;
    }
    public void execute(){
        this.command.execute();
    }
}

class TV extends Receiver{
    
    public String toString(){
        return this.getClass().getSimpleName();
    }
}
class DVDPlayer extends Receiver{
    
    public String toString(){
        return this.getClass().getSimpleName();
    }
}

public class CommandDemoEx{
    public static void main(String args[]){
        // On command for TV with same invoker 
        Receiver receiver = new TV();
        Command onCommand = new OnCommand(receiver);
        Invoker invoker = new Invoker(onCommand);
        invoker.execute();
        
        // On command for DVDPlayer with same invoker 
        receiver = new DVDPlayer();
        onCommand = new OnCommand(receiver);
        invoker = new Invoker(onCommand);
        invoker.execute();            
    }
}

produzione:

Switch on from:TV
Switch on from:DVDPlayer

Spiegazione:

In questo esempio,

  1. L' interfaccia di comando definisce il metodo execute() .
  2. OnCommand è ConcreteCommand , che implementa il metodo execute() .
  3. Il ricevitore è la classe base.
  4. TV e DVDPlayer sono due tipi di ricevitori , che vengono passati a ConcreteCommand come OnCommand.
  5. Invoker contiene Command . È la chiave per decompilare il Sender dal ricevitore .
  6. Invoker riceve OnCommand -> che chiama Receiver (TV) per eseguire questo comando.

Usando Invoker, puoi attivare TV e DVDPlayer. Se estendi questo programma, spegni anche TV e DVDPlayer.

Casi d'uso principali:

  1. Per implementare il meccanismo di callback
  2. Per implementare la funzionalità di annullamento e ripetizione
  3. Mantenere una cronologia dei comandi


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow