c++ - 解耦两个通知类

标签 c++ algorithm events poco

我只是盯着 Poco 框架看。我有另一个底层框架,它已经在使用 Poco 框架并抽象了它的某些部分,以使其更加容易。

我想用一个简单的场景来解释这个问题:
考虑我的程序中有一个矩形对象。该形状内部有私有(private)的 HitTest 方法,并且在 HitTest 在一定时间内为真时,我必须在另一个类(即我的Fountain类)中触发一个函数。< br/>

我不需要将任何特定的形状对象信息传递给 Fountation 类中的函数。我的框架已经为我提供了 NotifyEventAddListener 的一些功能。如果我采用这种方法,我的形状类中将有一个事件,该事件将通过添加监听器(如果传递形状则为对象)在喷泉中订阅,并且事件通知 来自形状类。

现在,对于 Poco 通知中心,我将把 NotificationCenter 引用传递给第二个类,而不是将形状对象引用传递给基础类。然后,fountain 类将有一个观察者,并且观察者将通过 postNotification()
从形状中收到通知 我在这里看到的两种方法之间的唯一区别是不传递特定的对象信息。
我只是这里的一名新开发人员,试图尽可能学习良好的编码实践,并且不清楚这里的解耦。这里两个类是如何解耦的呢? (因为我没有传递 shape 对象而只是使用 notificationcenter 对象?)

编辑:添加到上述问题。假设我还有 10 个其他类必须监听某个通知,所以我还必须将 Notification Center 的引用传递给所有这些类?这样,只有我才能在我的类中添加通知中心的观察者。

最佳答案

基本上是的。如果Fountain类只知道NotificationCenter,那么它就不再与形状(矩形或其他)耦合。这假设形状发布的通知也不依赖于触发它的对象。

编辑:对您编辑的答复是"is",您需要对每个需要通知的对象调用 addObserver 方法

关于c++ - 解耦两个通知类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414572/

相关文章:

c# - 如何以编程方式将事件接收器附加到 SPList?

c# - 订阅/取消订阅(添加/删除)扩展方法内的事件

c++ - 在 C++ 中使用递归将表达式括起来以获得最小结果

c++ - 在 C++ 中将数组作为参数传递

c++ - AVL树中的删除

algorithm - 时间复杂度是多少?

java - 二叉树最大和级别 - 更好的设计?

c++ - get_line可以直接填一个std::vector<std::string>吗?

序列填充数字的算法

java - 如何创建自己的事件。当传感器的值发生变化时如何调用方法?