Design patterns
Modello di comando
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 :
Componenti di base e flusso di lavoro:
-
Command
dichiara un'interfaccia per comandi astratti comeexecute()
-
Receiver
sa come eseguire un particolare comando -
Invoker
detieneConcreteCommand
, che deve essere eseguito -
Client
creaConcreteCommand
e assegnareReceiver
-
ConcreteCommand
definisce il binding traCommand
eReceiver
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,
- L' interfaccia di comando definisce il metodo
execute()
. - OnCommand è ConcreteCommand , che implementa il metodo
execute()
. - Il ricevitore è la classe base.
- TV e DVDPlayer sono due tipi di ricevitori , che vengono passati a ConcreteCommand come OnCommand.
- Invoker contiene Command . È la chiave per decompilare il Sender dal ricevitore .
- 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:
- Per implementare il meccanismo di callback
- Per implementare la funzionalità di annullamento e ripetizione
- Mantenere una cronologia dei comandi