在C++中使用全局update()函数的Obsever模式(或类似的模式)
The Obsever pattern (or something similar) using a global update() function in C++?
我正在C++中创建一个MVC应用程序,我希望较低级别的模型类能够用简单的文本更新GUI,以向读取器显示输出。我不想到处传递函数或对象指针,因为这会变得一团糟,我必须到处传递它们。我本质上想要的是相当于控制台GUI的"cout"——某种全局函数,可以在任何地方调用它来更新GUI,而不必了解GUI。
我在标题中提到了Observer模式,因为它听起来很像——GUI可以以某种方式订阅这个全局对象或函数,并在调用它时监听它。然而,我并不是专门寻找使用Observer的解决方案。
人们已经向我提到了信号和插槽,但当然,除非是全局的,否则你仍然需要"传递东西",以允许对象发出信号。同样,一个全球性的参考点将是有益的。
如何在确保遵守良好设计原则的同时做到这一点?
实际上,在这里使用Observer模式似乎是合适的。然而,我认为你在这里有一些错误。您需要清楚地定义每个参与方的角色。我建议使用以下分区:GUI是观察者(即侦听器(,较低级别的对象是向侦听器发出更改信号的对象。初始化后,较低级别的模块将向GUI(观察器(注册自己。一旦发生更改,较低级别的模块将执行观测者的公共侦听处理程序,提供所需的数据作为输入。
这将使您能够实现您的目标,并且该计划不涉及任何全局性因素。
您可以使用stdout
和stderr
来执行此操作。只需将它们的输出重定向到您的应用程序即可。最简单的解决方案是将应用程序输出重定向到文件,并使用tail -f redirected_output_file_name
查看更新。
或者,您可以使用log4cxx
,在这种情况下需要实现自定义的appender。
相关文章:
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么在保护模式下继承升级不起作用
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 此模式的C++RegEx
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 使用可变模板的Broadcaster/Listener模式
- c++方法参数只能在linux的发布模式下自行更改
- 资源管理设计模式
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 小字符串优化(调试与发布模式)
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 在C++的一系列数字中查找重复模式
- 是否允许使用带有"w+"模式的 freopen 进行标准设置?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- С++ wxWidgets:代码架构,设计原则和模式
- 以只读模式打开数据库时SQLITE_CANTOPEN错误