Design patterns
Befehlsmuster
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 :
Grundkomponenten und Workflow:
-
Command
deklariert eine Schnittstelle für abstrakte Befehle wie "execute()
-
Receiver
einen bestimmten Befehl ausführen -
Invoker
hältConcreteCommand
, das ausgeführt werden muss -
Client
erstelltConcreteCommand
und weist denReceiver
-
ConcreteCommand
definiert die Bindung zwischenCommand
undReceiver
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
- Die Befehlsschnittstelle definiert
execute()
Methodeexecute()
. - OnCommand ist ConcreteCommand , das die Methode execute
execute()
implementiert. - Empfänger ist die Basisklasse.
- TV und DVDPlayer sind zwei Arten von Receivern , die wie OnCommand an ConcreteCommand übergeben werden.
- Aufrufer enthält Befehl . Es ist der Schlüssel, um den Sender vom Empfänger abzukoppeln .
- 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:
- Callback-Mechanismus implementieren
- Rückgängigmachen und Wiederherstellen der Funktionalität
- Einen Verlauf der Befehle pflegen