抱歉,找不到答案,我几乎可以肯定有人提出过这个问题。
我的问题是我正在编写一些系统库来运行嵌入式设备。我有可以通过无线电广播发送到这些设备的命令。这只能通过文本来完成。在系统库中,我有一个线程来处理看起来像这样的命令
if (value.equals("A")) { doCommandA() } else if (value.equals("B")) { doCommandB() } else if etc.
问题在于,要执行的命令很多,很快就会变成无法控制的事情。在几个月的时间里,看起来很可怕,调试起来很痛苦,而且难以理解。
使用命令模式:
public interface Command { void exec(); } public class CommandA() implements Command { void exec() { // ... } } // etc etc
然后构建一个Map<String,Command>对象并用Command实例填充它:
Map<String,Command>
Command
commandMap.put("A", new CommandA()); commandMap.put("B", new CommandB());
那么你可以将if / else if链替换为:
commandMap.get(value).exec();
编辑
你还可以添加诸如UnknownCommand或的特殊命令NullCommand,但是你需要一个CommandMap处理这些特殊情况的命令,以最大程度地减少客户的检查。
UnknownCommand
NullCommand
CommandMap