1

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

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

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

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

4

2 回答 2

0

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

否则您可以使用log4cxx,在这种情况下您需要实现自定义附加程序。

于 2013-02-23T13:01:33.520 回答
0

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

这将使您能够实现您的目标,并且该方案不涉及全局变量。

于 2013-02-23T13:09:44.843 回答