6

で遊び始めたばかりですがObservableObserverそれはupdate()メソッドであり、さまざまなアクションが を呼び出すときに何をすべきか理解できませんnotifyObservers()

つまり、私のクラスには、最後にandObservableを呼び出すいくつかの異なるメソッドがあります。呼び出されたメソッドによっては、UI (Swing) の一部を更新する必要があります。ただし、クラスに実装されているメソッドは 1 つだけです。setChanged()notifyObservers()update()Observer

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

この状況を処理する最善の方法は何ですか?

4

2 に答える 2

8

一般に、update() の呼び出しを受け取ったときに、オブザーバブルからすべてを更新する必要があります。それが実用的でない場合は、notifyObservers() にヒントを渡すことができます。

ギャング・オブ・ブックは、オブザーバー・パターンの結果の 1 つは次のようになると述べています。

「予期しない更新。オブザーバーは互いの存在を認識していないため、サブジェクトを変更することの最終的なコストを認識できない可能性があります。サブジェクトに対する一見無害な操作が、オブザーバーとその依存オブジェクトへの更新のカスケードを引き起こす可能性があります。さらに、依存関係明確に定義されていない、または維持されていない基準は、通常、誤った更新につながり、追跡が困難になる可能性があります。

この問題は、単純な更新プロトコルがサブジェクトの変更内容に関する詳細を提供しないという事実によって悪化します。オブザーバーが何が変更されたかを発見するのに役立つ追加のプロトコルがなければ、変更を推測するために懸命に働かざるを得なくなる可能性があります。」 また、実施中、彼らは言う:

「オブザーバー固有の更新プロトコルの回避: プッシュ モデルとプル モデル。オブザーバー パターンの実装では、サブジェクトが変更に関する追加情報をブロードキャストすることがよくあります。サブジェクトは、この情報を引数として Update に渡します。情報の量は大きく異なる場合があります。

プッシュ モデルと呼ばれる極端な例では、サブジェクトは、オブザーバーが望むかどうかにかかわらず、変更に関する詳細情報をオブザーバーに送信します。対極にあるのがプル モデルです。サブジェクトは最小限の通知しか送信せず、オブザーバーはその後、明示的に詳細を要求します。

プル モデルは、サブジェクトがオブザーバーを知らないことを強調しますが、プッシュ モデルは、サブジェクトがオブザーバーのニーズについて何かを知っていると仮定します。プッシュ モデルでは、オブザーバーの再利用性が低下する可能性があります。これは、サブジェクト クラスが Observer クラスについて、常に正しいとは限らない仮定を行うためです。一方、プル モデルは、オブザーバー クラスがサブジェクトの助けなしに何が変更されたかを確認する必要があるため、非効率的である可能性があります。"

于 2010-06-01T02:39:46.887 に答える
3

の 2 番目のパラメーターupdate()は typeObjectであるため、適切なものを渡すことができます。お気づきのように、アプローチはかなり一般的です。対照的に、を維持するクラスは、EventListenerList指定どおりに使用すると、実行時の型の安全性をある程度得ることができます。

于 2010-06-01T02:19:12.060 に答える