2014-11-03 28 views
3

我最近決定服務定位器是一個好的設計模式,可以像我的世界經理一樣訪問我的遊戲重要經理(可以產生實體並跟蹤它們)和一個合理的經理。但是,我不確定訪問服務定位器的最佳方式。我首先傳遞了一個指向我在main中實例化的服務定位器的指針,但是這變得單調乏味,因爲我發現所有東西(投射物,玩家,所有東西!)都需要它的參數。當我需要他們時,我應該將我的服務定位器傳遞給我的所有對象嗎?

我在這裏問這是因爲我不認爲它是特定於遊戲,但如果我錯了,請讓我知道。

我是否以錯誤的方式討論這種模式? 謝謝你的時間。

編輯:單身人士會解決這個問題嗎?他們有全球接入點,但我不認爲這是最乾淨的解決方案。有任何想法嗎?或者這是最好的?

回答

1

這是一種使用全局變量(或單例)的情況。您必須權衡使用全局變量/單例的缺點,而不必幾乎無處不在傳遞參考。如果您覺得缺點不太可能影響您的設計/代碼,那麼使用全局變量可以使您的代碼更加清潔。

使用全局變量的一些缺點是:

  • 管理的全局會更加困難壽命。如果你在不同的翻譯單元(cpp文件)中定義了多個全局變量,那麼它們實例化的順序是未指定的,所以它們最好在實例化時不要相互依賴。一種解決方案是存儲全局指針並在程序的早期實例化對象(例如main),但是必須確保在程序的銷燬階段不要創建懸掛指針。
  • 您可能需要在多線程環境中同步對全局變量的訪問。對於全局變量,使用每個線程對象(或代理)來阻止必須同步訪問比較困難。

一個單身的其他缺點可以是:

  • 不能夠創建類,例如副本用於保存或撤消。
+0

感謝您的信息。這兩種選擇有沒有其他選擇?謝謝:) – 5Mixer 2014-11-03 08:20:32

+0

@ Mixerman123重新設計,你不需要訪問任何地方的保存對象? – 2014-11-03 08:34:31

+0

@D Drmmr如果我需要訪問音頻記錄和實體管理等非常獨立的內容,我該如何解決?如果你有解決方案,我很樂意看到! – 5Mixer 2014-11-03 08:41:00

0

就個人而言,我贊成在任何地方使用單個的上下文對象,而不是使用單例。讓上下文對象爲您提供指向/引用或訪問所有不同服務,管理器等的函數。

+0

是的,服務定位器。我問的是,我如何訪問該對象?我應該讓它的方法是靜態的嗎?如果是這樣,怎麼樣? – 5Mixer 2014-11-04 22:49:38

相關問題