我正在考虑在我的应用程序中使用注册表模式来存储指向某些应用程序窗口和 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< 的引用
类。
我觉得这两种解决方案都比单例或“注册表”方法好。请注意,我以前从未听说过这种模式,但我相信我理解它的意图。关于为什么全局状态对象(更具体地说是单例)是一种不好的做法的更多信息 can be found here .
关于c++ - 注册表模式 : to use or not to use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424982/