2

私のアプリケーションでは、多くのオブザーバーと 1 つのサブジェクトがありますが、変数の変更について特定のオブザーバーに通知を送信したいと考えています。

私は混乱していて、インターネットでも検索しました..しかし、あまり得られませんでした。

以前に質問されていたら申し訳ありません...現在、簡潔な答えを見つけることができません。

4

3 に答える 3

5

私のアプリケーションでは、多くのオブザーバーと 1 つのサブジェクトがありますが、変数の変更について特定のオブザーバーに通知を送信したいと考えています。

この設計パターンの重要なテナントであり、より疎結合を可能にする理由の 1 つは、観察対象が観察者についての知識を持っている必要がないためです。代わりに、すべてのオブザーバーに通知し、その情報に基づいてオブザーバーが通知に反応するかどうかを選択できるようにします。

例として、PropertyChangeListener を取り上げます。オブザーバーの通知は、PropertyChangeSupport がすべてのオブザーバーで propertyChanged を呼び出し、メソッドで PropertyChangeEvent を渡すことによって行われます。この PropertyChangeEvent には、オブザーバーがメッセージへの応答方法を決定するために使用できる String propertyName フィールドがあります。

于 2013-08-17T01:51:55.427 に答える
0

「ヒント」変数を通知メソッドに追加します ( http://en.wikipedia.org/wiki/Observer_pattern )。更新するオブザーバーのインスタンスを渡します。「ヒント」がこれであるかどうかを確認し、正しいことを行うように通知メソッドを変更します。

于 2013-08-17T02:33:16.333 に答える
0

これがあなたのための設計アプローチです:

  1. Subject クラスで、オブザーバーのリストを複数作成します。
  2. オブザーバーの 1 つのリストには、メッセージをブロードキャストするすべてのオブザーバーが含まれている必要があります
  3. メッセージをマルチキャストするオブザーバーの他のリストを作成します。マルチキャストする必要があるメッセージのタイプに応じて、マルチキャスト メッセージを作成できます。
  4. したがって、すべてのオブザーバーにメッセージを送信する必要がある場合は、 onMessage を呼び出すか、ブロードキャストリスト内のオブザーバーのメソッドを同様に通知するだけです
  5. 選択したオブザーバーのリストにメッセージを送信する必要がある場合は、onMessage を呼び出すか、マルチキャスト リスト内のオブザーバーのメソッドを同様に通知します。
于 2013-08-17T01:53:22.700 に答える