【问题标题】:Most efficient implementation of passing parameters through objects from a OOP design perspective?从 OOP 设计的角度来看,通过对象传递参数的最有效实现是什么?
【发布时间】:2012-10-29 12:43:41
【问题描述】:

我想创建一种方法来创建任意数量的播放器对象(存储在 PlayLogic 中的 ArrayList 中)。现在我决定只创建 2 个玩家对象。我通过调用createPlayers(2) 在 PlayActivity 中对其进行硬编码,所以这个的实现.. 最好将参数传递给 Play,然后将参数传递给创建 2 个播放器对象的 PlayLogic.. 或者如果我更好直接从 PlayActivity 调用 PlayLogic? 我希望我的设计能够反映高效的设计(所以我希望尽可能少的关系,不确定这是否是正确的 UML 术语..)。

【问题讨论】:

  • 担心1-1-额外方法调用的效率?认真的吗?
  • @ignis 虽然它可能是一个线性规模,但 12 万亿次额外调用就是 12 万亿次额外调用。
  • @ignis 从设计的角度来看,程序的效率/性能(就时钟周期而言)不如效率,我想让这个程序及其源代码易于忽略和维护同时保持相同的灵活性和“复杂性”,而不会增加任何不必要的开销(当然我不会对其进行超级优化,但希望尽可能易于理解和进一步开发)。 “效率”可能是一个错误的术语……
  • @Woot4Moo 我认为他不需要调用 Player 工厂方法超过 1 次...
  • @ignis 没错,我可能只需要在开始游戏时调用它一次,(如果我退出游戏并重新启动它,我会再次调用它,或者更改玩家数量),但不会经常调用它。无论如何,我想确保设计是正确的。

标签: java android oop parameter-passing


【解决方案1】:

在此过程中增加一层会产生微不足道的开销。这种开销不足以使设计变得混乱(不正确的抽象)。有额外开销的原因是因为您在多层方法中向其他人询问信息。例如:

2 个人可以比 3 个人用相同的信息更快地相互交流,请遵循以下示例:

A -> B (what is 2+2)  
B-> A (4) 

VICE

A->B (what is 2+2)  
B->C (what is 2+2)  
C->B (4)  
B->A(4)

进一步谈到性能,但选择使用ArrayList,可能是这种数据结构不正确,我们需要有关底层对象模型和最常执行的操作的更多信息在执行期间。

【讨论】:

  • 感谢您的回答。所以我想我会直接从 PlayActivity 调用 PlayLogic。关于 ArrayList 的使用,使用如下方式会更好:List<Player> playerList = new ArrayList<Player> 吗?我选择使用 ArrayList 是因为我想使用任意数量的播放器,但我从 2 个播放器开始(以确保它可以使用很少的错误源),我是否应该简单地使用 Player[] (播放器-数组)?
  • 所以 ArrayList 将在接近满时调整大小。一个 ArrayList 巧合地由一个数组支持,它将把你放在同一个地方。
  • 好的,那么在这种情况下我是否使用 ArrayList 和数组真的没关系?
  • 正确,我得到的可能是 List 不是正确的实现。您可能需要考虑 Map 或 Set 或 Tree 等
  • 这个讨论是题外话,但我会回答你的评论。我宁愿使用 List 或 ArrayList 因为我更喜欢使用这些结构,我猜它们对性能或代码可读性没有负面影响,所以我会坚持使用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2010-12-09
  • 1970-01-01
相关资源
最近更新 更多