Basit ve açık bir şekilde dfa tarafından gösterildiği gibi bir arayüz uygulamak temiz ve zariftir (ve "resmi olarak" desteklenen bir yoldur). Arayüz konseptinin anlamı budur.
C # 'da, c'de işlev işaretçileri kullanmayı seven programcılar için temsilciler kullanabiliriz, ancak DFA'nın tekniği kullanmanın yoludur.
Sen de bir diziye sahip olabilirsin
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
Sonra dizine göre bir komut çalıştırabilirsiniz.
commands[7].exec();
DFA'lardan intihal yapma, ancak arayüz yerine soyut bir temel sınıfa sahip olma. Daha sonra kullanılacak olan cmdKey'e dikkat edin. Tecrübe ile, bir ekipman komutanının sıklıkla alt komutları olduğunu fark ediyorum.
abstract public class Command()
{
abstract public byte exec(String subCmd);
public String cmdKey;
public String subCmd;
}
Komutlarınızı bu şekilde oluşturun,
public class CommandA
extends Command
{
public CommandA(String subCmd)
{
this.cmdKey = "A";
this.subCmd = subCmd;
}
public byte exec()
{
sendWhatever(...);
byte status = receiveWhatever(...);
return status;
}
}
Daha sonra bir anahtar-değer çifti emme işlevi sağlayarak genel HashMap veya HashTable'ı genişletebilirsiniz:
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);
}
}
}
Ardından komut deponuzu oluşturun:
CommandHash commands =
new CommandHash(
{
new CommandA("asdf"),
new CommandA("qwerty"),
new CommandB(null),
new CommandC("hello dolly"),
...
});
Şimdi objektif olarak kontroller gönderebilirsiniz
commands.get("A").exec();
commands.get(condition).exec();