Design patterns
Kommandomönster
Sök…
Exempel på kommandomönster i Java
wikipedia definition:
Kommandomönster är ett beteendemönster där ett objekt används för att kapsla all information som behövs för att utföra en åtgärd eller utlösa en händelse vid ett senare tillfälle
UML-diagram från dofactory :
Grundläggande komponenter och arbetsflöde:
-
Command
deklarerar ett gränssnitt för abstrakta kommandon somexecute()
-
Receiver
vet hur man kör ett visst kommando -
Invoker
harConcreteCommand
, som måste köras -
Client
skaparConcreteCommand
och tilldelarReceiver
-
ConcreteCommand
definierar bindning mellanCommand
ochReceiver
På detta sätt frikopplar kommandomönstret avsändaren (klienten) från mottagaren via Invoker . Invoker har fullständig kunskap om vilket kommando som ska utföras och kommandot vet vilken mottagare som ska åberopas för att utföra en viss operation.
Kodavsnitt:
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();
}
}
produktion:
Switch on from:TV
Switch on from:DVDPlayer
Förklaring:
I det här exemplet
- Kommandogränssnittet definierar
execute()
-metoden. - OnCommand är ConcreteCommand , som implementerar
execute()
-metoden. - Mottagaren är basklassen.
- TV och DVDPlayer är två typer av mottagare som överförs till ConcreteCommand som OnCommand.
- Invoker innehåller kommando . Det är nyckeln till att avkoppla avsändaren från mottagaren .
- Invoker får OnCommand -> som ringer mottagare (TV) för att utföra detta kommando.
Genom att använda Invoker kan du slå på TV och DVDPlayer. Om du förlänger detta program stänger du av både TV och DVDPlayer också.
Fall av nyckelanvändning:
- För att implementera återuppringningsmekanismen
- För att implementera ångra och göra om funktionalitet
- Att upprätthålla en historik med kommandon
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow