我正在考虑在应用程序中使用注册表模式来存储指向某些应用程序窗口和 Pane 的弱指针。该应用程序的一般结构如下所示。
该应用程序具有一个MainFrame顶层窗口,其中没有几个子 Pane 。可以有许多基于TabPane类型的选项卡。我需要从所有TabPane选项卡中引用ParamsPane面板,因此我需要一个指向ParamsPane对象的指针以存储在某处。可以有很多选择,但最明显的选择是(1)将指针存储在Application单例对象内或(2)创建一个简单的注册表类。就像是:
class Registry {
public:
static MainApp* application;
static MainWindow* mainWindow;
};
这是一个好习惯吗?这种方法的好处和警告是什么?
最佳答案
这取决于您为什么要引用ParamsPane
。我可以想到两个原因和两个不同的解决方案。
您想更新ParamsPane
中的数据,因为TabPane
中的数据已更改。
如果此数据与 View 完全分离,则可能应该将其分开。这意味着遵循Model-View-Controller模式。 ParamsPane
和TabPane
实例都可以分别访问模型。因此,两者之间没有直接引用。
两者之间有很强的联系,与数据无关。
如果前面提到的要点无关紧要,并且两个面板之间有很强的联系,则可以考虑编写一个特定的TabPane
类,该类存储对ParamsPane
类的引用。
我觉得这两种解决方案都比Singleton或“Registry”方法更好。请注意,我以前从未听说过这种模式,但是我相信我了解它的意图。有关为什么全局状态对象(更具体地讲是单例)为什么是不好的做法的更多信息can be found here。
关于c++ - 注册表模式: to use or not to use,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5424982/