Реалізація інтерфейсу, продемонстрована просто та просто dfa, є чіткою та елегантною (і "офіційно" підтримується). Для чого призначена концепція інтерфейсу.
У C # ми могли б використовувати делегатів для програмістів, які люблять використовувати покажчики функтону в c, але методика DFA - це спосіб використання.
Ви також можете мати масив
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
Тоді ви могли виконати команду за індексом
commands[7].exec();
Плагіат із DFA, але замість інтерфейсу має абстрактний базовий клас. Зауважте cmdKey, який буде використаний пізніше. З досвіду я усвідомлюю, що часто у розпорядження обладнання є також підкоманди.
abstract public class Command()
{
abstract public byte exec(String subCmd);
public String cmdKey;
public String subCmd;
}
Створіть свої команди таким чином,
public class CommandA
extends Command
{
public CommandA(String subCmd)
{
this.cmdKey = "A";
this.subCmd = subCmd;
}
public byte exec()
{
sendWhatever(...);
byte status = receiveWhatever(...);
return status;
}
}
Потім можна розширити загальний HashMap або HashTable, надавши функцію всмоктування пари ключ-значення:
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);
}
}
}
Потім побудуйте свій командний магазин:
CommandHash commands =
new CommandHash(
{
new CommandA("asdf"),
new CommandA("qwerty"),
new CommandB(null),
new CommandC("hello dolly"),
...
});
Тепер ви могли об'єктивно надсилати елементи керування
commands.get("A").exec();
commands.get(condition).exec();