Implementacja interfejsu, jak w prosty i przejrzysty sposób zademonstrowała dfa, jest przejrzysta i elegancka (oraz "oficjalnie" obsługiwana). Właśnie do tego służy koncepcja interfejsu.
W C # moglibyśmy użyć delegatów dla programistów, którzy lubią używać wskaźników funkcji w c, ale metoda DFA jest sposobem na użycie.
Możesz też mieć tablicę
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
Następnie możesz wykonać polecenie według indeksu
commands[7].exec();
Plagiat z DFA, ale posiadający abstrakcyjną klasę bazową zamiast interfejsu. Zwróć uwagę na cmdKey, który będzie używany później. Z doświadczenia wiem, że często polecenie sprzętowe ma również podkomendy.
abstract public class Command()
{
abstract public byte exec(String subCmd);
public String cmdKey;
public String subCmd;
}
Skonstruuj swoje polecenia w ten sposób,
public class CommandA
extends Command
{
public CommandA(String subCmd)
{
this.cmdKey = "A";
this.subCmd = subCmd;
}
public byte exec()
{
sendWhatever(...);
byte status = receiveWhatever(...);
return status;
}
}
Następnie możesz rozszerzyć ogólny HashMap lub HashTable, udostępniając funkcję zasysania pary klucz-wartość:
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);
}
}
}
Następnie stwórz swój magazyn poleceń:
CommandHash commands =
new CommandHash(
{
new CommandA("asdf"),
new CommandA("qwerty"),
new CommandB(null),
new CommandC("hello dolly"),
...
});
Teraz możesz obiektywnie przesyłać kontrolki
commands.get("A").exec();
commands.get(condition).exec();