2012-07-04 50 views
2

我有一個GameEngine類,它是一個精靈,還有一個GameModel,它是一個Singleton並擁有大量數據。參考Singleton的AS3

然後,我

GameModel.getInstance().variable; 

我的遊戲引擎獲取數據現在在了很多人,我不知道它是否會更有效,如果我在GameEngine不得不把GameModel一個參考,而不是創造這一切的時候

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

我有一個很強烈的感覺會更有效,但如果有人可以讓我知道肯定,讓我知道你是否能潛在地看出破綻用這種方法,這將是很大的讚賞,歡呼,羅瑞。

回答

4

將實例存儲在屬性中絕對是一個好主意,因爲查找速度會更快,但也因爲它降低了GameEngine對GameModel實現細節的知識。

例如,假設您在GameEngine類中有一堆GameModel.getInstance()調用,並且您決定放棄單例行爲。您將重寫所有這些調用,但是如果您將實例緩存到屬性中,則只需重寫一行即可。這就是說,完全忘記單身人士,他們比過早的優化更加邪惡,但如果你必須使用一個,至少將實例存儲在客戶類中的屬性中。

2

你當然可以添加它作爲一個實例,但我懷疑它會造成明顯的差異。不成熟的優化是所有邪惡的根源:)

如果你真的好奇,你應該嘗試對它進行基準測試,看看它是否真的改變了任何東西。

編輯:哦,是的,因爲在這裏提到的其他答案 - 可能要完全放棄單身。我建議尋找swiftsuspenders https://github.com/tschneidereit/SwiftSuspenders/進行依賴注入(甚至是robotlegs,對於輕量級的MVC解決方案,包括swiftsuspenders)。

+1

感謝您的迴應Jonatan! 只做了100,000次循環的快速測試 _data.speed + = _data.speedAcceleration; 57MS – rorypicko

+0

和其他版本相比? –

+1

我無意中在加入其他結果之前打入輸入而不是換入輸入! GameModel.getInstance()。speed + = GameModel.getInstance()。speedAcceleration; 122MS – rorypicko