c++ - 注册表模式 : to use or not to use

标签 c++ design-patterns

我正在考虑在我的应用程序中使用注册表模式来存储指向某些应用程序窗口和 Pane 的弱指针。应用程序的一般结构如下所示。

Application diagram

该应用程序有一个 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图案。 ParamsPaneTabPane 实例都可以单独访问模型。所以两者之间没有直接的引用。

两者之间存在某种强关联,与数据无关。

如果前面提到的点不相关,并且两个面板之间有很强的联系,您可以考虑编写一个特定的 TabPane 类,它存储对 ParamsPane< 的引用 类。

我觉得这两种解决方案都比单例或“注册表”方法好。请注意,我以前从未听说过这种模式,但我相信我理解它的意图。关于为什么全局状态对象(更具体地说是单例)是一种不好的做法的更多信息 can be found here .

关于c++ - 注册表模式 : to use or not to use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424982/

相关文章:

c++ - 为什么选择类型转换功能?

java - 单例模式的正确使用

c# - 多线程设计模式

c++ - 单例中静态声明之间的差异

c++ - 数组分配——你能阻止构造函数和析构函数被调用吗?

c++ - 如何将 Delphi Stream 传递给 c/c++ DLL

c++ - 声明函数模板的语法

c++ - 什么是 Win32 消息编码?

java - 使用线程来运行方法

design-patterns - 在装饰器模式中将实例变量移动到抽象类中的原因是什么?