我一直在阅读有关如何在 C++ 应用程序中实现正确 MVC 的内容,并且基本上得出了以下观点:有两种实现方式:
- 观察者模式
- 信号/槽
但是,在这两种情况下,我阅读的示例都遵循主题可以更改并通知其观察者的结构,但观察者永远不会更改主题。现在这种情况出现了一些“问题”。
假设我有一个名为 Text 的类(一个模型组件),另一个名为 TextEditor 的类(一个 GUI 组件),它以某种方式显示“文本”并且应该能够修改它,还有一些其他类也可以修改“文本” .
对,所以我使用观察者模式,将“文本”作为主题,将“文本编辑器”作为观察者。没什么大不了的。
如果以某种方式更改了“文本”,则 Text 调用 Text::notify() 并且我的 TextEditor 将反映更改。美好的。
现在,如果我使用 TextEditor 来修改 Text 怎么办?
'TextEditor' 知道'Text',所以它调用类似 textInstance.setText(...) 的东西......在 setText 结束时,'Text' 调用 notify,并且'TextEditor' 被通知它自己所做的更改!'Text' 甚至不能向除 'TextEditor' 之外的所有人发送通知,因为它不应该知道它的观察者!
我觉得这是不对的,即使抛开性能原因也不“干净”。我敢打赌有更好的方法来实现这一点,但我被卡住了。有人有提示吗?
我并不是真的在寻找预制的 C++ 实现,而是更多地了解我应该如何正确看待事物。