Szukaj…


Przykład wzorca poleceń w Javie

definicja wikipedia :

Wzorzec poleceń to behawioralny wzorzec projektowy, w którym obiekt jest używany do kapsułkowania wszystkich informacji potrzebnych do wykonania akcji lub wywołania zdarzenia w późniejszym czasie

Diagram UML z dofactory :

wprowadź opis zdjęcia tutaj

Podstawowe komponenty i przepływ pracy:

  1. Command deklaruje interfejs dla poleceń abstrakcyjnych, takich jak execute()
  2. Receiver wie, jak wykonać określone polecenie
  3. Invoker posiada ConcreteCommand , który należy wykonać
  4. Client tworzy ConcreteCommand i przypisuje Receiver
  5. ConcreteCommand definiuje powiązanie między Command a Receiver

W ten sposób wzorzec polecenia oddziela Sender (Client) od Receiver poprzez Invoker . Invoker ma pełną wiedzę o tym, które polecenie ma zostać wykonane, a Command wie, który odbiornik ma zostać wywołany w celu wykonania określonej operacji.

Fragment kodu:

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();            
    }
}

wynik:

Switch on from:TV
Switch on from:DVDPlayer

Wyjaśnienie:

W tym przykładzie

  1. Interfejs poleceń definiuje metodę execute() .
  2. OnCommand to ConcreteCommand , który implementuje metodę execute() .
  3. Odbiornik jest klasą podstawową.
  4. TV i DVDPlayer to dwa typy odbiorników , które są przekazywane do ConcreteCommand, jak OnCommand.
  5. Invoker zawiera Command . Jest to klucz do rozłączenia Sender z Receiver .
  6. Invoker otrzymuje OnCommand -> który woła Receiver (TV), aby wykonać to polecenie.

Korzystając z Invokera, możesz włączyć TV i DVDPlayer. Jeśli rozszerzysz ten program, wyłączysz zarówno telewizor, jak i odtwarzacz DVD.

Kluczowe przypadki użycia:

  1. Aby wdrożyć mechanizm zwrotny
  2. Aby wdrożyć funkcję cofania i ponawiania
  3. Aby zachować historię poleceń


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow