通知其他组件一个组件中的更改的最佳方法是什么

时间:2019-09-19 04:38:28

标签: c++ c++11 visual-c++

我们有一个Visual C ++ 2013(C ++ 11)解决方案,其中包含多个组件。如果任何一个组件发生任何更改,我想通知其他组件。并非每个组件都需要知道每个更改。我的意思是,

假设我有A,B,C和D组成部分

  • A组件发生变化。B,C和D组件需要了解A组件的变化。

  • 组件B有变化。组件A和C需要了解组件B的变化。

  • C组件发生变化。A,B和D组件需要了解B组件的变化。
  • 组件D有所变化。没人需要知道。

为此,我们有3个想法,我想知道什么是最好的方法,当然,除了这3个想法之外,其他任何事情都将受到欢迎。

想法1:

  • 组件A,B,C和D具有可调用的方法(函数x),以使他知道发生了更改。假设如果组件A发生了更改,A将直接调用需要通知的其他每个组件的函数x。

想法2:

  • 组件A,B,C和D具有可调用的方法(函数x),以使他知道发生了更改。当每个组件发生变化时,每个组件都会发布一个事件。其他组件只有在对它们感兴趣时才向组件注册,以接收有关已注册组件更改的消息。收到消息后,组件将通过调用其x方法对其进行处理。

想法3:

  • 组件A,B,C和D具有可调用的方法(函数x),以使他知道发生了更改。当每个组件发生变化时,每个组件都会发布一个事件。消息到达所有组件,接收者根据消息的发送者决定是否需要处理消息,因此调用或不调用其x方法。

我们在解决方案中考虑的因素是

  • 性能
  • 实施的最低复杂度
  • 易于实施

1 个答案:

答案 0 :(得分:0)

这听起来像是使用“观察者设计模式”的情况。通常,使用这种设计模式,您有两种不同类型的类:Subject和Observer。观察者将订阅主题的更改,以便在主题发生更改时,将通知观察者。

在您的情况下,每个组成部分都是主题和观察者。一个组件可以将其兴趣注册到另一个组件中。通过将指向自身的指针传递给另一个组件,可以将发生的更改通知给它,即将调用其函数x。

这里有一些在C ++中使用观察者模式的示例: https://cpppatterns.com/patterns/observer.html
https://www.codeproject.com/Articles/328365/Understanding-and-Implementing-Observer-Pattern-2