dfa에 의해 간단하고 명확하게 입증 된대로 인터페이스를 구현하는 것은 깨끗하고 우아합니다 (그리고 "공식적으로"지원되는 방식). 이것이 인터페이스 개념의 의미입니다.
C #에서는 c에서 functon 포인터를 사용하려는 프로그래머를 위해 대리자를 사용할 수 있지만 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();