Suche…


Beispiel für ein Befehlsmuster in Java

Wikipedia- Definition:

Befehlsmuster ist ein Verhaltensmuster, in dem ein Objekt verwendet wird, um alle Informationen einzukapseln, die zum Ausführen einer Aktion oder zum Auslösen eines Ereignisses zu einem späteren Zeitpunkt erforderlich sind

UML-Diagramm von dofactory :

Geben Sie hier die Bildbeschreibung ein

Grundkomponenten und Workflow:

  1. Command deklariert eine Schnittstelle für abstrakte Befehle wie " execute()
  2. Receiver einen bestimmten Befehl ausführen
  3. Invoker hält ConcreteCommand , das ausgeführt werden muss
  4. Client erstellt ConcreteCommand und weist den Receiver
  5. ConcreteCommand definiert die Bindung zwischen Command und Receiver

Auf diese Weise entkoppelt das Befehlsmuster den Sender (Client) über Invoker vom Empfänger . Invoker hat vollständige Kenntnis darüber, welcher Befehl ausgeführt werden soll, und Befehl weiß, welcher Empfänger aufgerufen werden muss, um eine bestimmte Operation auszuführen.

Code-Auszug:

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();            
    }
}

Ausgabe:

Switch on from:TV
Switch on from:DVDPlayer

Erläuterung:

In diesem Beispiel

  1. Die Befehlsschnittstelle definiert execute() Methode execute() .
  2. OnCommand ist ConcreteCommand , das die Methode execute execute() implementiert.
  3. Empfänger ist die Basisklasse.
  4. TV und DVDPlayer sind zwei Arten von Receivern , die wie OnCommand an ConcreteCommand übergeben werden.
  5. Aufrufer enthält Befehl . Es ist der Schlüssel, um den Sender vom Empfänger abzukoppeln .
  6. Invoker empfängt OnCommand ->, der Receiver (TV) aufruft, um diesen Befehl auszuführen.

Mit Invoker können Sie TV und DVDPlayer einschalten. Wenn Sie dieses Programm erweitern, schalten Sie auch TV und DVDPlayer aus.

Wichtige Anwendungsfälle:

  1. Callback-Mechanismus implementieren
  2. Rückgängigmachen und Wiederherstellen der Funktionalität
  3. Einen Verlauf der Befehle pflegen


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow