2013-08-17 83 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)。傳遞你想要更新的觀察者的實例。修改你的通知方法來檢查「提示」是否是這樣並做正確的事情。