我只是盯着Poco框架。我有另一个基础框架已经使用Poco框架并抽象它的一些部分,使其更容易。
我想用一个简单的场景来解释这个问题:
考虑到我的程序中有一个矩形形状对象。形状内部有私有hit Testing
方法,并且在特定时间内命中测试为真,我必须在另一个类中触发一个函数,即我的Fountain
类。
我不需要将形状的任何特定对象信息传递给Fountation
类中的函数。我的框架已经为我提供了NotifyEvent
和AddListener
的一些功能。如果我想通过这种方法,我会在我的形状类中有一个事件,它将在Add Listener
(如果传递形状的对象)中通过喷泉订阅,并且事件从内部通知形状类。
现在,通过Poco通知中心,我不会将形状对象引用传递给基础类,而是将NotificationCenter
引用传递给第二个类。 fountain
类将有一个观察者,观察者将通过postNotification()
的形状通知
我在这两种方法之间看到的唯一区别是没有传递特定的对象信息。我在这里只是一个更新的开发人员,试图尽可能地学习良好的编码实践,并且不清楚这里的解耦。这两个类如何解耦? (因为我没有传递shape
对象而只是使用notificationcenter
对象?)
编辑:添加上述问题。我们说我还有其他10个类需要听某个通知,所以我还必须将Notification Center
的引用传递给所有这些类吗?这样,我才能在我的课程中为通知中心添加观察者。
答案 0 :(得分:1)
基本上是的。如果Fountain
类仅知道NotificationCenter
,则它不再与形状(Rectangle
或其他)相关联。这假定形状发布的通知也不依赖于触发它的对象。
编辑:对您的修改的回复是肯定的,您需要使用需要通知的每个对象调用addObserver
方法
答案 1 :(得分:1)
您应该做的是将消息发送和接收过程解耦为Observer - Listener结构。这称为观察者模式。您可以阅读有关此模式的更多详细信息here。这将使您免于处理多个引用和事件,以及每次需要将通信添加到另一个类时考虑消息发送/接收实现。
您可以在书籍Design Patterns. Elements of Reusable Object-Oriented Software中找到有关设计模式的更多信息。