質問

私はちょうど遊び始めました Observable, Observer そしてそれはそうです update() 方法と私は、異なるアクションが呼び出すときに何をすべきか理解できません notifyObservers().

つまり、私の Observable クラスには、呼び出すいくつかの異なる方法があります setChanged()notifyObservers() 最終的には。呼び出された方法に応じて、UI(スイング)の一部を更新する必要があります。ただし、1つしかありません update() に実装されているメソッド Observer クラス。

私は何かをに渡すことです notifyObservers() 方法、そして引数を確認できます update() しかし、それはそれをする良い方法のようには感じません。たとえそれがそうであっても、私は何を渡すべきですか?アクション/メソッドの簡単な説明がある文字列?アクション/メソッドコードのようなint?他に何か?

この状況に対処するための最良の方法は何ですか?

役に立ちましたか?

解決

一般に、Update()への電話が表示されたら、すべてをObservableから更新する必要があります。それが実用的でない場合は、notifyobservers()にヒントを渡すことができます。

ブックのギャングは、オブザーバーパターンの結果の1つは次のとおりです。

「予期しない更新。オブザーバーはお互いの存在を知らないため、被験者を変更する究極のコストを盲目にすることができます。主題の一見無害な操作は、オブザーバーとその依存オブジェクトに更新のカスケードを引き起こす可能性があります。さらに、依存関係明確に定義されていない、または維持されていない基準は、通常、偽りの更新につながります。これは追跡するのが難しい場合があります。

この問題は、単純な更新プロトコルが被験者の何が変わったかについての詳細を提供しないという事実によって悪化しています。オブザーバーが変化したものを発見するのを助けるための追加のプロトコルがなければ、彼らは変化を推測するために一生懸命働くことを余儀なくされるかもしれません。 「実装の下で、彼らは次のように言います。

「オブザーバー固有の更新プロトコル:プッシュとプルモデルの回避。オブザーバーパターンの実装には、多くの場合、被験者が変更に関する追加情報が追加の情報を放送します。この情報は、更新の引数としてこの情報を渡します。情報の量は大きく異なる場合があります。

プッシュモデルと呼ばれる1つの極端な場合、被験者は、オブザーバーが変更に関する詳細情報を送信します。もう一方の極端には、プルモデルがあります。被験者は、最も最小限の通知以外の何も送信し、オブザーバーはその後明示的に詳細を求めます。

プルモデルは、被験者のオブザーバーに対する無知を強調しますが、プッシュモデルは、被験者がオブザーバーのニーズについて何かを知っていると想定しています。プッシュモデルは、観察者の再利用性を低下させる可能性があります。これは、被験者のクラスが常に真実ではない可能性のあるオブザーバークラスについて仮定しているためです。一方、オブザーバーのクラスは、被験者の助けなしに何が変わったかを確認する必要があるため、プルモデルは非効率的である可能性があります。 「

他のヒント

2番目のパラメーター update() タイプです Object, 、したがって、適切なものを渡すことができます。ご想像のとおり、アプローチはかなり一般的です。対照的に、Aを維持するクラス EventListenerList 指定されている場合に使用すると、ランタイムタイプの安全性をある程度取得できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top