2013-08-17 40 views
1

在我的应用程序中,有很多观察者和一个主题,但我想通知特定的观察者有关变量的一些变化。设计模式 - 向特定观察者发送通知

我越来越困惑,我在互联网上搜索它..但没有太多。

对不起,如果它已被问及更早...现在我无法找到一些简洁的答案。

回答

5

在我的应用程序中,有很多观察者和一个主题,但是我想发送通知给特定的观察者,对变量进行一些更改。

这对我来说似乎不是一个合理的计划,因为这种设计模式的关键租户和它允许宽松耦合的原因之一是观察者不应该有任何关于观察者的知识。相反,您可以通知所有观察员,然后让观察员根据信息选择是否对通知作出反应。

以PropertyChangeListener为例。通过PropertyChangeSupport在所有观察者上调用propertyChanged并在该方法中传递PropertyChangeEvent来完成观察者的通知。这个PropertyChangeEvent有一个String propertyName字段,任何观察者都可以使用它来帮助决定它将如何响应该消息。

+0

因此,PropertyChangeListener可以被看作Observer的变体,对吧?你对这个问题有什么想法? http://stackoverflow.com/questions/23516499/unsure-as-to-how-to-listen-to-model-properties –

0

这里是你的设计方案:

  1. 在你的主题类,创建观察家
  2. 的多个列表
  3. 观察员应包含所有观察员广播消息
  4. 创建一个列表其他一些观察员列举消息。根据您需要多播的讯息类型,您可以拥有多播讯息。
  5. 所以,当你需要将消息发送到所有的观察者,只需调用的onMessage或与之相似通知观察员的方法在自己的广播列表
  6. 当您需要将消息发送到观察者的选择列表,然后调用的onMessage或与之相似通知广播列表中观察者的方法
+0

,但我将如何组播特定的消息..如果我检查后调用notifyObserver()消息类型,那么它会通知所有观察者... – neham

+0

@neham我的建议需要你写自己的观察者和观察逻辑。由于使用现成的java api,在你的情况下不会帮助你。 –

+0

这意味着我可以向所有人发送通知...然后观察者可以决定他们是否要处理它? – neham

0

将“提示”变量添加到您的通知方法(http://en.wikipedia.org/wiki/Observer_pattern)。传递你想要更新的观察者的实例。修改你的通知方法来检查“提示”是否是这样并做正确的事情。