2016-08-04 91 views
0

当A被要求执行某些动作时(例如,如果编辑菜单被切换,不应执行保存按钮上的保存动作),组件A需要知道组件B的状态。我的应用程序结构像一个嵌套组件的树。访问其他组件状态的好方法是什么?

我已经尝试将我需要的所有组件传递给其他组件的构造函数。每当我向应用程序添加更多组件时,我都觉得这很乏味,我必须将它们全部传递下去。此外,一些组件在相同的构造器下实例化,但它们需要彼此了解。因为我需要按顺序实例化它们,所以我不能将组件A和B传递给对方。

我也尝试过使用事件系统在组件之间发信号。 (观察者模式?)它似乎更多的是矫枉过正,并不打算像这样使用。

我尝试的第三件事是通过依赖注入来使用单例。组件注册自己在提供程序的初始化和提供程序可以注入提供访问其他组件。

第三种方法是最轻松的,它为我工作。但我谷歌,Singleton不是一种推荐的方法,因为它只是全局变量,它缠住了代码。但Unity游戏引擎似乎有同样的事情(FindComponentByTag)。这是什么一般的做法?

回答

0

处理这种事情的标准模式是通常使用Observer模式的MVC(模型视图控制器)。组件(我想你是有GUI组件的)不应该直接访问其他组件的状态。相反,状态应该由模型来处理。需要了解状态的组件被注册为模型的观察者。

+0

我明白了。因此,控制器可以访问尽可能多的模型。在更新时,模型将更改推送给其订户(视图组件)。我之前使用过MVC库,但从来没有想过在这种情况下我必须实现它,哈!谢谢你的答案。 – Flmhdfj

相关问题