我正在用C ++创建一个MVC应用程序,我希望较低级别的模型类能够用简单的文本更新GUI以向阅读器显示输出。我不想传递函数或对象指针,因为它会变得混乱,我将不得不将它们传遍整个地方。我本质上想要的是等同于控制器GUI的“cout” - 可以调用某种全局函数来从任何地方更新GUI,而无需了解GUI。
我已经在标题中提到了Observer模式,因为它听起来很像 - GUI可以在某种程度上订阅这个全局对象或函数,并在调用它时进行监听。但是,我并不是专门寻找使用Observer的解决方案。
人们已经向我提到了信号和插槽,但当然,除非是全球性的,否则你仍需要“传递”以允许物体发出信号。同样,全球参考点也会有所帮助。
如何在确保遵守良好的设计原则的同时做到这一点?
答案 0 :(得分:0)
您可以使用stdout
和stderr
执行此操作。只需将输出从它们重定向到您的应用程序。最简单的解决方案 - 将应用程序输出重定向到文件,并使用tail -f redirected_output_file_name
查看更新。
或者你可以使用log4cxx
,在这种情况下你需要实现自定义appender。
答案 1 :(得分:0)
确实,在这里使用Observer模式似乎是合适的。但是,我认为你在这里有一些错误。您需要明确定义每个参与方的角色。我建议使用以下分区:GUI是观察者(即监听器),而较低级别的对象是发出监听器变化的信号。在初始化时,较低级别的模块将使用GUI(观察者)注册自己。一旦发生更改,较低级别的模块将执行观察者的公共侦听处理程序,提供所需的数据作为输入。
这将使您实现目标,并且该计划不涉及全局变量。