2015-11-13 80 views
0

我正在使用C++編寫一個程序,到目前爲止我已經嘗試在圖層中構建它。 所以,到目前爲止,我已經有一個類可以處理啓動後的所有操作,比如點擊和鍵盤控制,並且坐在消息循環等中,並且我有幾個類實例充當'管理者',比如窗口管理器和調試管理器。如何訪問全局類實例?

我的問題是,讓這些「經理」中的某些人能夠從任何地方訪問的最佳方式是什麼?例如,在製作我的程序時,幾乎每個地方都需要提供數學和調試功能。

到目前爲止,我所做的只是將指針傳遞給管理器,因爲我創建了需要訪問它的每個類。 有沒有更好的方法?這是一個稍微好點的做法嗎?

+1

這是什麼語言? –

+1

啊!忘了提到這一點。我現在編輯它。它在C++ –

+0

這些函數可以是靜態的嗎? – Kenney

回答

2

有沒有更好的方法?

在過去的日子裏,singletons是建議的解決方案。最近,singletons have fallen out of favor

代替單身人士,在適當的命名空間下的一組函數是下一個最好的方法,IMO。

namespace WindowManager 
{ 
    ... 
} 

namespace DebugManager 
{ 
    ... 
} 

在相應命名空間中的函數實現中,可以使用單例作爲實現細節。

1

您可以使用不同的設計模式。這裏有幾個:

  • 工廠模式 例如,你可以在每個需要一個調試實例類調用LoggerFactory.getLogger(...);。優點是你可以得到一個不同的實例,適合它被調用的上下文。例如,你可以傳遞一個類名來用於日誌記錄。

  • Singleton模式 類似工廠模式,不同之處在於SomeFactory.getInstance()將總是返回相同的實例。如果您傳遞給各個類的所有指針都是同一個實例,那麼這是一個很好的選擇。

  • 全局變量 類似於singleton模式,但要簡單得多。通常不建議。

  • 依賴注入 這基本上是工廠模式,其中類成員開始使用服務查找(ComponentRegistry.lookup(...))初始化。由容器自動完成。通常用於支持方法註釋的語言。

  • 靜態方法對於實用功能,建議使用此功能。如果他們有一個複雜的狀態(許多變量),它們應該保存在一個實例中。這個實例可以是一個私有的靜態'final'實例,隱藏內部狀態併爲調用者提供一個乾淨的'facade'。

當然還有更多。