2011-01-10 19 views

答えて

2

、パブリッシャ/サブスクライバモデルのように考えてください。在庫オブジェクト(対象)の価格が更新されると

の例では、株式市場は、

、この株式に加入している任意の「投資家」(オブザーバー)が更新価格

0

オブザーバーは、変更されたときにコードの異種コンポーネントに通知する場合に使用します。イベントベースのシステムが思い浮かぶ。通常、イベントベースのシステムでは、ハンドラを登録するときに、どのようなフレームワークを使用しても、オブザーバ実装を使用して、イベントが発生したときにハンドラに通知します。

私が使用した領域は、Sproutcoreフレームワークにあります。フレームワークには、「キーバリュー観測」という機能があります。基本的に、オブジェクトのフィールドにオブザーバーを設定することができます。フィールド値が変更されると、オブザーバーは自動的に起動します。これは、たとえば、ビュー要素が親ビューのレイアウト上にオブザーバを持つ場合、ビューの要素のサイズが変更されると、ビュー自体が再描画されるためです。または、値が変更され、他の値を再計算する必要がある場合は、オブザーバを初期値に設定し、オブザーバから再計算を実行できます。 オブジェクトが変化した場合、他のオブジェクト(複数可) に通知する必要があるとき

http://en.wikipedia.org/wiki/Observer_pattern

+1

イベントリスナーに似ていますか? – Prisoner

+0

@nathan、正しい。通常、イベントベースのシステムでは、ハンドラを登録するときに、どのようなフレームワークを使用しても、オブザーバ実装を使用して、イベントが発生したときにハンドラに通知します。 – hvgotcodes

0

Observer patternを見るが使用されます。 。だから、オブザーバーパターン は

です)1)件名または出典: アクションが発生します。

2)1人以上のオブザーバー: は、変更があった場合に通知する必要があります が発生しました。

ここでは、この上の素晴らしい記事です:

0

が通知されることになるIあなたがソケットからデータを受け取り、データが到着するたびに通知を受けたいとしましょう。したがって、データを受け取っているクラスにオブザーバーを登録します。データが来たら、オブザーバーの特定のメソッドが呼び出され、データを処理する適切なアクションを実行できます。

0

オブザーバーパターンは、多くのオブザーバーがあるオブジェクトの状態変化を知る必要がある場合に使用されます。これは、たとえば、GUIの中で、他のコンポーネントが変更されたときにいくつかのコンポーネントを "自動的に"変更する場合に使用できます。

したがって、チェックボックスがあり、他のコンポーネントを表示するかどうかの状態(チェックされているかチェックされていないか)によっては、他の構成要素の数は可変であってもよい。だからあなたはチェックボックスを使ってそれらのすべてを自分自身に登録してほしい。チェックボックスは、ユーザーがクリックしたときに変更が発生したことを各オブザーバに通知し、その変更にどのように対処するかを決定することができます。彼らがどのように反応するかという論理は、オブザーバーにあります。チェックボックスは、自分が何をしているのかを知る必要はありません。

関連する問題