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 :

ange bildbeskrivning här

Grundläggande komponenter och arbetsflöde:

  1. Command deklarerar ett gränssnitt för abstrakta kommandon som execute()
  2. Receiver vet hur man kör ett visst kommando
  3. Invoker har ConcreteCommand , som måste köras
  4. Client skapar ConcreteCommand och tilldelar Receiver
  5. ConcreteCommand definierar bindning mellan Command och Receiver

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

  1. Kommandogränssnittet definierar execute() -metoden.
  2. OnCommand är ConcreteCommand , som implementerar execute() -metoden.
  3. Mottagaren är basklassen.
  4. TV och DVDPlayer är två typer av mottagare som överförs till ConcreteCommand som OnCommand.
  5. Invoker innehåller kommando . Det är nyckeln till att avkoppla avsändaren från mottagaren .
  6. 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:

  1. För att implementera återuppringningsmekanismen
  2. För att implementera ångra och göra om funktionalitet
  3. 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