La mise en œuvre d'une interface comme le démontre simplement et clairement par le dfa est propre et élégant (et "officiellement" de prise en charge). Ce que le concept d'interface est destinée.
En C#, nous pourrions utiliser des délégués pour les programmeurs qui utilisent due à des pointeurs en c, mais DFA de la technique est le moyen de les utiliser.
Vous pourriez avoir un tableau trop
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
Ensuite, vous pouvez exécuter une commande par index
commands[7].exec();
Plagiat dans la rédaction de DFA, mais ayant une classe de base abstraite au lieu d'une interface. Avis de la cmdKey qui seront utilisées plus tard. Par expérience, je me rends compte que souvent un équipement de commande a les sous-commandes.
abstract public class Command()
{
abstract public byte exec(String subCmd);
public String cmdKey;
public String subCmd;
}
La réalisation de vos commandes ainsi,
public class CommandA
extends Command
{
public CommandA(String subCmd)
{
this.cmdKey = "A";
this.subCmd = subCmd;
}
public byte exec()
{
sendWhatever(...);
byte status = receiveWhatever(...);
return status;
}
}
Vous pouvez ensuite étendre générique HashMap ou table de hachage en fournissant une paire clé-valeur sucer la fonction:
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);
}
}
}
Puis construire votre commande en magasin:
CommandHash commands =
new CommandHash(
{
new CommandA("asdf"),
new CommandA("qwerty"),
new CommandB(null),
new CommandC("hello dolly"),
...
});
Vous pouvez maintenant envoyer des commandes objectivement
commands.get("A").exec();
commands.get(condition).exec();