在C ++中使用全局更新()函数的Observer模式(或类似的东西)?

时间:2013-02-23 12:54:40

标签: c++

我正在用C ++创建一个MVC应用程序,我希望较低级别的模型类能够用简单的文本更新GUI以向阅读器显示输出。我不想传递函数或对象指针,因为它会变得混乱,我将不得不将它们传遍整个地方。我本质上想要的是等同于控制器GUI的“cout” - 可以调用某种全局函数来从任何地方更新GUI,而无需了解GUI。

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

人们已经向我提到了信号和插槽,但当然,除非是全球性的,否则你仍需要“传递”以允许物体发出信号。同样,全球参考点也会有所帮助。

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

2 个答案:

答案 0 :(得分:0)

您可以使用stdoutstderr执行此操作。只需将输出从它们重定向到您的应用程序。最简单的解决方案 - 将应用程序输出重定向到文件,并使用tail -f redirected_output_file_name查看更新。

或者你可以使用log4cxx,在这种情况下你需要实现自定义appender。

答案 1 :(得分:0)

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

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