La implementación de una interfaz como la demuestra dfa simple y llanamente es limpia y elegante (y es compatible "oficialmente"). Para esto está destinado el concepto de interfaz.
En C #, podríamos usar delegados para programadores a los que les gusta usar punteros de función en c, pero la técnica de DFA es la forma de usar.
También podrías tener una matriz
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
Entonces podrías ejecutar un comando por índice
commands[7].exec();
Plagio de DFA, pero con una clase base abstracta en lugar de una interfaz. Observe la cmdKey que se usaría más tarde. Por experiencia, me doy cuenta de que con frecuencia un comando de equipo también tiene subcomandos.
abstract public class Command()
{
abstract public byte exec(String subCmd);
public String cmdKey;
public String subCmd;
}
Construye tus mandamientos así,
public class CommandA
extends Command
{
public CommandA(String subCmd)
{
this.cmdKey = "A";
this.subCmd = subCmd;
}
public byte exec()
{
sendWhatever(...);
byte status = receiveWhatever(...);
return status;
}
}
Luego, podría extender HashMap o HashTable genérico proporcionando una función de succión de par clave-valor:
public class CommandHash<String, Command>
extends HashMap<String, Command>
(
public CommandHash<String, Command>(Command[] commands)
{
this.commandSucker(Command[] commands);
}
public commandSucker(Command[] commands)
{
for(Command cmd : commands)
{
this.put(cmd.cmdKey, cmd);
}
}
}
Luego construye tu almacén de comandos:
CommandHash commands =
new CommandHash(
{
new CommandA("asdf"),
new CommandA("qwerty"),
new CommandB(null),
new CommandC("hello dolly"),
...
});
Ahora puedes enviar controles de forma objetiva
commands.get("A").exec();
commands.get(condition).exec();