-1

在我的项目中,我想将脚本中的大量函数加载到集合中以保存它们并在以后(可能多次)执行它们而无需再次阅读脚本。我需要尽可能快地访问这些功能,并考虑了两种方法:

  1. 命令模式:我的第一个想法是将脚本命令作为对象(命令模式)存储在集合中,并在我需要执行脚本时在 for-each 循环中执行所有这些命令。虽然代码会更容易阅读,但我认为通过对象访问所有不同的命令会消耗大量的性能和内存。

    for (Command command : commandList) { command.execute();

  2. chars 和 Switch Case 的集合:我的第二个想法是将 char 或 int 等原始变量存储到集合中,并将 switch-case 构造放入 for-each-loop 中。我会使用原语,因为我认为它比字符串对象更快。因此我会使用像 Trove 这样的库。我认为这种方式可能比命令模式更快,因为不必访问命令对象。此外,将占用更少的内存。另一方面,我认为它可能会更慢,因为命令模式可以直接访问正确的函数,而 switch-case 构造必须多次检查 char 是否为 a、b、c、d 等等。

    for (char command : commandList) { switch(command){ case 'a': doA(); break; case 'b': doB(); break; case 'c': ... } }

你认为一种方法更好吗?你知道另一种方法吗?你会推荐哪种类型的收藏?

4

2 回答 2

2

您的问题归结为:多态性与 Switch 语句。

前者具有更好的可维护性和可读性,因为当人们想知道发生了什么或添加它时,无需使用幻数作为其键(或在您的情况下为字符)通过大型 switch 语句。

就性能而言,两者都应该是可以忽略不计和高度优化的,因为它们是非常常见和简单的情况,因此最好担心可读性/可维护性而不是优化,因此多态性更好。

于 2014-07-25T12:32:17.283 回答
0

我认为第二种方法更好。

另一方面,我认为它可能会更慢,因为命令模式可以直接访问正确的函数,而 switch-case 构造必须多次检查 char 是否为 a、b、c、d 等等。

编译器会照顾并优化它。如果您的脚本文件大小不是以 GB 为单位,那没关系。

于 2014-07-25T12:24:49.800 回答