
Command: deklariert eine Schnittstelle zum Ausführen einer Methode.
Concrete Command: Erbt von Command und implementiert .execute(). Verpackt eine Funktion, die eigene Logik enthalten kann und/oder etwas der Receiver Klasse ausführt.
Client: die Anwendung (Main)
Invoker: Verwaltet die Concrete Commands. Hier können .undo() usw. implementiert werden
Receiver: Jede Klasse kann ein Receiver sein. Hier werden die Receiver Methoden von einem Concrete Command verpackt
Beispiel
Command
public interface Command{
public void execute();
}Receiver
public class Receiver{
public void doSomething(String state){
System.out.println("State: " + state);
}
}Concrete Command
public class ConcreteCommand implements Command{
private Receiver receiver;
private String state;
public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
@Override
public void execute(){
receiver.doSomething(state);
}
public void setState(String state){
this.state = state;
}
}Invoker
public class Invoker{
private Command command;
public void setCommand(Command command){
this.command = command;
}
public void executeCommand(){
command.execute();
}
}Client (Main)
public class Main{
public static void main(String[] args){
Receiver receiver = new Receiver();
String state1 = "STATE_ON";
String state2 = "STATE_OFF";
ConcreteCommand concreteCommand1 = new ConcreteCommand(receiver);
concreteCommand1.setState(state1);
ConcreteCommand concreteCommand2 = new ConcreteCommand(receiver);
concreteCommand2.setState(State2);
Invoker invoker1 = new Invoker();
invoker1.setCommand(concreteCommand1);
Invoker invoker2 = new Invoker();
invoker2.setCommand(concreteCommand2);
invoker1.executeCommand(); // Output: State: STATE_ON
invoker2.executeCommand(); // Output: State: State_OFF
}
}