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();