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 :

voer hier de afbeeldingsbeschrijving in

Basiscomponenten en workflow:

  1. Command verklaart een interface voor abstracte commando's zoals execute()
  2. Receiver weet een bepaald commando uit te voeren
  3. Invoker heeft ConcreteCommand , dat moet worden uitgevoerd
  4. Client maakt ConcreteCommand en wijst Receiver
  5. ConcreteCommand definieert binding tussen Command en Receiver

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

  1. Opdrachtinterface definieert methode execute() .
  2. OnCommand is ConcreteCommand , die de methode execute() implementeert.
  3. Ontvanger is de basisklasse.
  4. TV en DVDPlayer zijn twee soorten ontvangers , die worden doorgegeven aan ConcreteCommand zoals OnCommand.
  5. Invoker bevat Command . Het is de sleutel om zender van ontvanger te ontkoppelen .
  6. 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:

  1. Terugbelmechanisme implementeren
  2. Om functionaliteit voor ongedaan maken en opnieuw uitvoeren te implementeren
  3. Een geschiedenis van opdrachten bijhouden


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow