एक इंटरफ़ेस को लागू करना जैसा कि सीधे और स्पष्ट रूप से dfa द्वारा प्रदर्शित किया जाता है, स्वच्छ और सुरुचिपूर्ण है (और "आधिकारिक तौर पर समर्थित तरीका")। इंटरफ़ेस अवधारणा के लिए यह क्या है।
C # में, हम प्रोग्रामर के लिए डेलीगेट्स का उपयोग कर सकते हैं जो c में फंक्शनलन पॉइंटर्स का उपयोग करना पसंद करते हैं, लेकिन DFA की तकनीक का उपयोग करने का तरीका है।
आपके पास एक सरणी भी हो सकती है
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
तब आप सूचकांक द्वारा एक कमांड निष्पादित कर सकते हैं
commands[7].exec();
डीएफए से चोरी, लेकिन एक इंटरफेस के बजाय एक सार आधार वर्ग होने। 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;
}
}
फिर आप एक महत्वपूर्ण-मूल्य जोड़ी चूसने की क्रिया प्रदान करके जेनेरिक हैशपैड या हैशटेबल का विस्तार कर सकते हैं:
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();