2

我有一个 GameEngine 类,它是一个精灵,还有一个 GameModel,它是一个 Singleton 并保存大量数据。

然后我得到数据

GameModel.getInstance().variable;

我的游戏引擎现在有很多,我想知道如果我在我的 GameEngine 中有对 GameModel 的引用而不是一直创建它是否会更有效

private var _data:GameModel = GameModel.getInstance();
trace(_data.variable);

我有一种非常强烈的感觉,它会更有效率,但如果有人可以让我确定并让我知道你是否可以看到这种方法的缺陷,我将不胜感激,欢呼,罗里。

4

2 回答 2

4

将实例存储在属性中绝对是一个好主意,因为查找会更快,而且还因为它降低了 GameEngine 对 GameModel 实现细节的了解。

例如,假设您在GameModel.getInstance()GameEngine 类中有一堆调用,并且您决定放弃单例行为。您将重写所有这些调用,但是如果您将实例缓存在一个属性中,您只需要重写一行。

That said, forget about singletons altogether, they're a far greater evil than premature optimization, but if you MUST use one, at least store the instance in a property in your client classes.

于 2012-07-04T15:19:21.723 回答
2

您当然可以将其添加为实例,但我怀疑它会产生明显的不同。过早的优化是万恶之源 :)

如果你真的很好奇,你应该尝试对其进行基准测试,看看它是否真的改变了任何东西。

编辑:哦,是的,正如这里提到的另一个答案 - 可能想要完全放弃单身人士。我建议查看 swiftsuspenders https://github.com/tschneidereit/SwiftSuspenders/以进行依赖注入(甚至是robotlegs,以获得出色的轻量级 MVC 解决方案,包括 swiftsuspenders)。

于 2012-07-04T09:24:52.923 回答