c++ - 在 C++ 中使用全局 update() 函数的观察者模式(或类似的东西)?

标签 c++

我正在用 C++ 创建一个 MVC 应用程序,我希望较低级别的模型类能够使用简单的文本更新 GUI 以向读者显示输出。我不想传递函数或对象指针,因为它会变得困惑,我将不得不传递它们到各处。我本质上想要的是相当于控制台 GUI 的“cout”——某种全局函数,可以调用它来从任何地方更新 GUI,而无需了解有关 GUI 的任何信息。

我在标题中提到了观察者模式,因为它听起来很像——GUI 可以以某种方式订阅这个全局对象或函数,并在它被调用时监听。但是,我并不是专门寻找使用 Observer 的解决方案。

人们向我提到了信号和插槽,但可以肯定的是,除非是全局的,否则您仍然需要“传递东西”以允许对象发出信号。同样,全局引用点会有所帮助。

我如何才能做到这一点,同时确保遵守良好的设计原则?

最佳答案

的确,这里使用观察者模式似乎很合适。但是,我认为你在这里有一些错误。您需要明确定义每个参与方的角色。我会建议以下分区:GUI 是观察者(即监听器),较低级别的对象是向监听器发出更改信号的对象。初始化后,较低级别的模块将向 GUI(观察者)注册自己。一旦发生变化,下层模块将执行提供所需数据作为输入的观察者的公共(public)监听处理程序。

这将使您能够实现您的目标,并且该计划不涉及任何全局变量。

关于c++ - 在 C++ 中使用全局 update() 函数的观察者模式(或类似的东西)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15040756/

相关文章:

c++ - 具有在编译时定义的不同类型的 vector

C++:如何决定是按引用还是按值传递参数?

c++ - 重载运算符返回的对象在 C++ 中丢失数据

c++ - postgresql c-extension 加载另一个外部库

c++ - C++ 中结构的大小 (sizeof) 与数组的实际大小不对应

c++ - Gstreamer FLAC管道创建错误

c++ - 从指针中查找指针

c++ - 将 argv 参数转换为 int

c++ - 如何让几何形状的面积和周长起作用?

c++ - 无法正确打印 vector 内容