2016-08-04 135 views
0

當A被要求執行某些動作時(例如,如果編輯菜單被切換,不應執行保存按鈕上的保存動作),組件A需要知道組件B的狀態。我的應用程序結構像一個嵌套組件的樹。訪問其他組件狀態的好方法是什麼?

我已經嘗試將我需要的所有組件傳遞給其他組件的構造函數。每當我向應用程序添加更多組件時,我都覺得這很乏味,我必須將它們全部傳遞下去。此外,一些組件在相同的構造器下實例化,但它們需要彼此瞭解。因爲我需要按順序實例化它們,所以我不能將組件A和B傳遞給對方。

我也嘗試過使用事件系統在組件之間發信號。 (觀察者模式?)它似乎更多的是矯枉過正,並不打算像這樣使用。

我嘗試的第三件事是通過依賴注入來使用單例。組件註冊自己在提供程序的初始化和提供程序可以注入提供訪問其他組件。

第三種方法是最輕鬆的,它爲我工作。但我谷歌,Singleton不是一種推薦的方法,因爲它只是全局變量,它纏住了代碼。但Unity遊戲引擎似乎有同樣的事情(FindComponentByTag)。這是什麼一般的做法?

回答

0

處理這種事情的標準模式是通常使用Observer模式的MVC(模型視圖控制器)。組件(我想你是有GUI組件的)不應該直接訪問其他組件的狀態。相反,狀態應該由模型來處理。需要了解狀態的組件被註冊爲模型的觀察者。

+0

我明白了。因此,控制器可以訪問儘可能多的模型。在更新時,模型將更改推送給其訂戶(視圖組件)。我之前使用過MVC庫,但從來沒有想過在這種情況下我必須實現它,哈!謝謝你的答案。 – Flmhdfj

相關問題