Cerco di imparare il pattern di progettazione Command, so già come funziona e dove viene usato, ma sono un po 'confuso riguardo all'implementazione.
Quindi so che è necessario impostare il contesto passando l'oggetto al costruttore o come argomento alla funzione execute()
. Quello che non capisco è perché abbiamo bisogno di definire tutti i comandi come classi separate e non come classi nidificate della classe su cui vogliamo eseguirle. Dal momento che abbiamo già bisogno di sapere qual è l'oggetto durante la creazione del comando (se impostiamo il contesto nel costruttore) qual è il punto di avere così tante classi separate?
Ad esempio:
Questa è l'implementazione tipica che di solito vedo ( da questo tutorial , I semplificato un po '):
public class Television {
public void on() {
System.out.println("TV is on");
}
}
public interface Command {
public void execute();
}
public class TurnTVOn implements Command {
ElectronicDevice theDevice;
public TurnTVOn(ElectronicDevice newDevice){
theDevice = newDevice;
}
public void execute() {
theDevice.on();
}
}
//somewhere in main
Television newDevice = TVRemote.getDevice();
Command onCommand = new TurnTVOn(newDevice);
onCommand.execute()
Perché non farlo in questo modo:
public interface Command {
public void execute();
}
public class Television {
public void on() {
System.out.println("TV is on");
}
public class TurnTVOn implements Command {
public void execute() {
on();
}
}
}
//somewhere in main
Command onCommand = TVRemote.getDevice().TurnTVOn;
onCommand.execute()
La risposta è probabilmente ovvia, ma sono un principiante e faccio domande "stupide" quando non capisco completamente qualcosa invece di limitarmi ad aiutarmi molto.