Design patterns
Wzór polecenia
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 :
Podstawowe komponenty i przepływ pracy:
-
Command
deklaruje interfejs dla poleceń abstrakcyjnych, takich jakexecute()
-
Receiver
wie, jak wykonać określone polecenie -
Invoker
posiadaConcreteCommand
, który należy wykonać -
Client
tworzyConcreteCommand
i przypisujeReceiver
-
ConcreteCommand
definiuje powiązanie międzyCommand
aReceiver
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
- Interfejs poleceń definiuje metodę
execute()
. - OnCommand to ConcreteCommand , który implementuje metodę
execute()
. - Odbiornik jest klasą podstawową.
- TV i DVDPlayer to dwa typy odbiorników , które są przekazywane do ConcreteCommand, jak OnCommand.
- Invoker zawiera Command . Jest to klucz do rozłączenia Sender z Receiver .
- 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:
- Aby wdrożyć mechanizm zwrotny
- Aby wdrożyć funkcję cofania i ponawiania
- Aby zachować historię poleceń