Die Implementierung einer Schnittstelle, wie sie von dfa einfach und klar demonstriert wird, ist sauber und elegant (und "offiziell" unterstützt). Dafür ist das Schnittstellenkonzept gedacht.
In C # könnten wir Delegaten für Programmierer verwenden, die gerne Funktionszeiger in c verwenden, aber die DFA-Technik ist die Art zu verwenden.
Sie könnten auch ein Array haben
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
Dann könnten Sie einen Befehl per Index ausführen
commands[7].exec();
Plagiieren von DFAs, aber mit einer abstrakten Basisklasse anstelle einer Schnittstelle. Beachten Sie den cmdKey, der später verwendet wird. Aus Erfahrung stelle ich fest, dass ein Gerätebefehl häufig auch Unterbefehle enthält.
abstract public class Command()
{
abstract public byte exec(String subCmd);
public String cmdKey;
public String subCmd;
}
Konstruieren Sie Ihre Befehle so:
public class CommandA
extends Command
{
public CommandA(String subCmd)
{
this.cmdKey = "A";
this.subCmd = subCmd;
}
public byte exec()
{
sendWhatever(...);
byte status = receiveWhatever(...);
return status;
}
}
Sie können dann die generische HashMap oder HashTable erweitern, indem Sie eine Schlüssel-Wert-Paar-Saugfunktion bereitstellen:
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);
}
}
}
Erstellen Sie dann Ihren Befehlsspeicher:
CommandHash commands =
new CommandHash(
{
new CommandA("asdf"),
new CommandA("qwerty"),
new CommandB(null),
new CommandC("hello dolly"),
...
});
Jetzt können Sie Steuerelemente objektiv senden
commands.get("A").exec();
commands.get(condition).exec();