一般に、update() の呼び出しを受け取ったときに、オブザーバブルからすべてを更新する必要があります。それが実用的でない場合は、notifyObservers() にヒントを渡すことができます。
ギャング・オブ・ブックは、オブザーバー・パターンの結果の 1 つは次のようになると述べています。
「予期しない更新。オブザーバーは互いの存在を認識していないため、サブジェクトを変更することの最終的なコストを認識できない可能性があります。サブジェクトに対する一見無害な操作が、オブザーバーとその依存オブジェクトへの更新のカスケードを引き起こす可能性があります。さらに、依存関係明確に定義されていない、または維持されていない基準は、通常、誤った更新につながり、追跡が困難になる可能性があります。
この問題は、単純な更新プロトコルがサブジェクトの変更内容に関する詳細を提供しないという事実によって悪化します。オブザーバーが何が変更されたかを発見するのに役立つ追加のプロトコルがなければ、変更を推測するために懸命に働かざるを得なくなる可能性があります。」 また、実施中、彼らは言う:
「オブザーバー固有の更新プロトコルの回避: プッシュ モデルとプル モデル。オブザーバー パターンの実装では、サブジェクトが変更に関する追加情報をブロードキャストすることがよくあります。サブジェクトは、この情報を引数として Update に渡します。情報の量は大きく異なる場合があります。
プッシュ モデルと呼ばれる極端な例では、サブジェクトは、オブザーバーが望むかどうかにかかわらず、変更に関する詳細情報をオブザーバーに送信します。対極にあるのがプル モデルです。サブジェクトは最小限の通知しか送信せず、オブザーバーはその後、明示的に詳細を要求します。
プル モデルは、サブジェクトがオブザーバーを知らないことを強調しますが、プッシュ モデルは、サブジェクトがオブザーバーのニーズについて何かを知っていると仮定します。プッシュ モデルでは、オブザーバーの再利用性が低下する可能性があります。これは、サブジェクト クラスが Observer クラスについて、常に正しいとは限らない仮定を行うためです。一方、プル モデルは、オブザーバー クラスがサブジェクトの助けなしに何が変更されたかを確認する必要があるため、非効率的である可能性があります。"