逻辑是用Java编程的最有效的方法
好吧,假设你有一个简单的程序,它使用字母a-z,如果你输入“c”,它会做一些事情,例如“e”可能会添加两个随机数,“h”显示单词“hello”,x显示时间等等
现在我试图通过26种不同的方法来解决这个问题,每个字母一个,然后是一个代码主体,扫描用户输入,然后调用适当的方法
现在他们显然有100种方法来解决这个问题,但我考虑的主要两种方法是,你可以有26个if或switch语句(例如,if(userInput.equals(“a”)),然后调用方法a等等)。或者我正在考虑的另一种方法是将方法标记为a-z,然后假设用户输入“f”,而不是检查它是哪个字母,而是信任用户并调用他们输入的字母
例如:
->;用户输入Y
用户输入=y
userInput();-(本质上是调用y(),这是一个方法名)
我相信有一种方法可以通过阅读这里的“反射”来做到这一点,但我听说可以避免过早优化,但在这种情况下,这不是最合乎逻辑的做法吗
# 1 楼答案
我的看法是:
对于这样一个简单的例子来说#3的体系结构稍微好一点,但它更适合扩展
编辑:快速n脏示例
}
# 2 楼答案
我会考虑使用^ {CD1>}。
这样,您只需获取用户输入,调用
Letter.getInstance(...)
,然后获取适当的Letter
实例。然后从那里,您只需在Letter
实例上调用foo()
,这将执行特定于该字母的操作# 3 楼答案
这是Command Pattern(编辑:删除所有幽默;感谢上帝的幽默巡逻)。实现它的方法有很多种,但最简单的是命令处理程序的映射
# 4 楼答案
如果您输入的是一个不存在风险的用户后缀,则该选项将不存在。如果使用数据库不是一个选项,那么最好的方法可能是实例化一个以字母为键、以显示结果为值的映射,并以用户输入为键调用get(objectkey)方法。如果结果为空(用户未输入字母),您可以适当地处理它
如果在用户输入字母时需要计算值,则可以使用对象填充地图,这些对象使用“过程”方法实现某些接口。当您提取值时,只需要调用process方法。注意匿名类的使用,因为在这种情况下这可能是最好的
其中Processor是您创建的某个接口
# 5 楼答案
好的,首先,反射实际上相当慢。它要求程序检查自己的代码(尽管这可能不是缓慢的原因)
你真的需要26种不同的方法吗?我觉得有点奇怪。在这些方法中是否存在任何重复代码?如果是,您应该找到这种通用性,并使用一个开关或一组if语句来管理字母特定的代码。这实际上会更有效,并且会为您的应用程序创建更小的占用空间
在我看来,担心交换机与if效率的主要问题在于,除非您编写的是任务关键型软件,或是极度优化的东西(您可能不会用java编写),并且所讨论的代码每秒被调用数千次,否则差异可以忽略不计
假设你真的需要这26种不同的方法,戴夫·牛顿的答案可能就是你想要的