Việc triển khai một giao diện như được trình bày đơn giản và dễ hiểu bởi dfa là rõ ràng và trang nhã (và cách được hỗ trợ "chính thức"). Đây là ý nghĩa của khái niệm giao diện.
Trong C #, chúng ta có thể sử dụng các đại diện cho các lập trình viên thích sử dụng con trỏ functon trong c, nhưng kỹ thuật của DFA là cách để sử dụng.
Bạn cũng có thể có một mảng
Command[] commands =
{
new CommandA(), new CommandB(), new CommandC(), ...
}
Sau đó, bạn có thể thực hiện một lệnh theo chỉ mục
commands[7].exec();
Đạo văn từ DFA's, nhưng có một lớp cơ sở trừu tượng thay vì một giao diện. Chú ý đến cmdKey sẽ được sử dụng sau này. Theo kinh nghiệm, tôi nhận ra rằng thường một lệnh thiết bị cũng có lệnh con.
abstract public class Command()
{
abstract public byte exec(String subCmd);
public String cmdKey;
public String subCmd;
}
Do đó, xây dựng các lệnh của bạn,
public class CommandA
extends Command
{
public CommandA(String subCmd)
{
this.cmdKey = "A";
this.subCmd = subCmd;
}
public byte exec()
{
sendWhatever(...);
byte status = receiveWhatever(...);
return status;
}
}
Sau đó, bạn có thể mở rộng HashMap hoặc HashTable chung bằng cách cung cấp chức năng hút cặp khóa-giá trị:
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);
}
}
}
Sau đó, xây dựng cửa hàng lệnh của bạn:
CommandHash commands =
new CommandHash(
{
new CommandA("asdf"),
new CommandA("qwerty"),
new CommandB(null),
new CommandC("hello dolly"),
...
});
Bây giờ bạn có thể gửi các điều khiển một cách khách quan
commands.get("A").exec();
commands.get(condition).exec();