在具有少量 POJO 和许多对其进行操作的辅助方法的应用程序中,在性能方面更好的是:使辅助类成为单例还是使方法静态?
4 回答
静态方法在性能和内存方面会稍微好一些:
- 避免虚拟函数调用的(潜在)开销。
- 消除类的实际实例所需的内存。
- 使用时无需获取类的实例。
singleton
但老实说,无论如何我可能仍然会这样做。不这样做所获得的收益可能很小,以至于即使在移动环境中,它们也会产生零差异。
你能避免这两种情况,让他们定期上课吗?
忽略性能问题,我建议避免使用单例和静态方法来提高您的可测试性。
单例和静态方法很难测试;在这方面,单例本质上是静态方法,但名称不同。在Google 测试团队工作的Misko Hevery有几篇关于这个主题的好文章:
不要担心这样荒谬的微优化。担心可维护性。
听起来该应用程序是完全以非 OO 风格编写的,并且可以从消除大多数“辅助方法”并将它们放在它们所属的位置以及它们所操作的数据中受益匪浅。
从表面上看你的问题,静态调用可能需要最少的 CPU 功率。原因是普通方法是动态绑定的,需要在运行时进行一些查找,而静态方法绑定编译时。
话虽如此,它在您的应用程序中可能并不重要。差别真的很小。如果您的应用程序使用 gui、xml 渲染、互联网连接或其他外部操作进行任何操作,您会发现这些活动使简单的数学查找相形见绌。
即使您不这样做,在分析期间您更有可能遇到阻碍您的应用程序的单个瓶颈,并发现它不是方法查找,而是您自己执行的一些逻辑。例如,您使用 arraylist 而不是 hashset 并且 contains 方法变得昂贵。
因此,由于这些情况下的性能并不重要,我建议使用静态方法之上的单例实现,因为设计稍微灵活一些。尽管在您提供的选择之外,我会完全放弃辅助类并将方法内联到您的 pojo 中。