当遇到A要求执行某些操作时,组件A需要知道组件B的状态(例如,如果切换编辑菜单,则不应执行保存按钮上的保存操作)。我的应用程序结构就像一个嵌套组件的树。
我已经尝试将我需要的所有组件传递给其他组件的构造函数。每当我向应用程序添加更多组件时,我发现这非常繁琐,我必须将它们一直传递下去。此外,一些组件在同一构造函数下实例化,但它们需要彼此了解。因为我需要按顺序实例化它们,所以我无法将组件A和组件B相互传递。
我也尝试使用事件系统在组件之间发出信号。 (观察者模式?)它似乎更像是一种矫枉过正,并不打算像这样使用。
我尝试的第三件事是通过依赖注入使用singleton。组件在init上向提供者注册自己,并且可以注入提供者以提供对其他组件的访问。
第三种方法是最轻松的,它对我有用。但我认为Singleton不是推荐的方法,因为它只是全局变量而且它会纠缠于代码中。但是Unity游戏引擎似乎有同样的东西(FindComponentByTag)。这是什么一般做法?
答案 0 :(得分:0)
处理这类事情的标准模式是MVC(模型视图控制器),它通常使用Observer模式。组件(我猜你有GUI组件)不应该直接访问其他组件的状态。相反,状态应该由模型处理。需要了解状态的组件被注册为模型的观察者。