多路分支程序该如何设计?

经常接触到这样的需求,根据不同的输入数据采用不同的操作,比如一些命令行工具,一些处理日志的工具等。简单点说,如果使用
if () {}
else if () {

}else if () {

}else {

}
或者switch等都感觉不是太好的办法。
哪位有好的经验说出来大家讨论啊~

可以考虑采用Command 模式

在一个配置文件中,建立输入的值和执行操作的对象的对应关系如:

命令1 Command1
命令2 Command2
命令3 Command3

使用的时候

//根据输入的命令从配置中取得执行操作的对象
Command cmd = xxx.getCommand(<命令>);
cmd.execute();


感觉楼主场景描述不够细致。如果为替代if elseIf语句,可选模式比较多,如上面的Command模式、状态State模式都可以。

Command等模式确实可以解决这些问题。
我最近写了一个命令行工具,采用的方法类似于Command模式,我将用户输入的String和对应的Command放入到一个Map中,Command中封装了处理用户请求的Handler实例。

改天传上代码请各位指教。

我的理解是将选择分支的处理转移至Command类中,至于是否使用State模式,我觉得应视分支内部对逻辑处理的粒度而定。如果粒度小,没有必要使用State模式。

根据楼主的描述,似乎不涉及到状态之间的转换,因此应用Command模式可能要恰当点

Command模式

我觉得有一个问题要考虑。就是处理时的上下文。

if...else中处理,可以利用所在类中的数据

而移到别的类中时,上下文改变了,处理时所需的数据可能取不到,这样不得不引用其它的对象,这样造成偶合。。。我很讨厌的

我喜欢完全独立的对象,如果对象间需要相互作用,常常移到客户代码里去实现