2

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

我想用一个简单的场景来解释这个问题:
假设我的程序中有一个矩形对象。该形状hit Testing内部具有私有方法,并且在命中测试在一段时间内为真时,我不得不在另一个类(即我的Fountain类)中触发一个函数。

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

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

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

4

2 回答 2

1

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

编辑:对您的编辑的答复是肯定的,您需要addObserver使用每个需要通知的对象调用该方法

于 2013-01-19T13:06:36.237 回答
1

你应该做的是将消息发送和接收过程解耦成一个观察者 - 监听器结构。这称为观察者模式您可以在此处阅读有关此模式的更多详细信息。这将使您免于处理多个引用和事件,以及每次需要将通信添加到另一个类时考虑消息发送/接收实现。

您可以在设计模式一书中找到有关设计模式的更多信息。可重用的面向对象软件的要素

于 2013-01-19T13:15:36.913 回答