Design patterns
Commando patroon
Zoeken…
Voorbeeld van opdrachtpatroon in Java
wikipedia definitie:
Opdrachtpatroon is een gedragspatroon waarin een object wordt gebruikt om alle informatie in te kapselen die nodig is om een actie uit te voeren of een gebeurtenis op een later tijdstip te activeren
UML-diagram van dofactory :
Basiscomponenten en workflow:
-
Command
verklaart een interface voor abstracte commando's zoalsexecute()
-
Receiver
weet een bepaald commando uit te voeren -
Invoker
heeftConcreteCommand
, dat moet worden uitgevoerd -
Client
maaktConcreteCommand
en wijstReceiver
-
ConcreteCommand
definieert binding tussenCommand
enReceiver
Op deze manier ontkoppelt het opdrachtpatroon zender (client) van ontvanger via invoker . Invoker heeft volledige kennis van die opdracht uit te voeren en Command weet welke ontvanger te worden ingeroepen om een bepaalde handeling uit te voeren.
Codefragment:
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();
}
}
output:
Switch on from:TV
Switch on from:DVDPlayer
Uitleg:
In dit voorbeeld
- Opdrachtinterface definieert methode
execute()
. - OnCommand is ConcreteCommand , die de methode
execute()
implementeert. - Ontvanger is de basisklasse.
- TV en DVDPlayer zijn twee soorten ontvangers , die worden doorgegeven aan ConcreteCommand zoals OnCommand.
- Invoker bevat Command . Het is de sleutel om zender van ontvanger te ontkoppelen .
- Invoker ontvangt OnCommand -> die Receiver (TV) oproept om dit commando uit te voeren.
Door Invoker te gebruiken, kunt u TV en DVDPlayer inschakelen. Als u dit programma uitbreidt, schakelt u zowel TV als DVDPlayer ook uit.
Belangrijkste gebruiksgevallen:
- Terugbelmechanisme implementeren
- Om functionaliteit voor ongedaan maken en opnieuw uitvoeren te implementeren
- Een geschiedenis van opdrachten bijhouden