3

オブザーバーパターンについての本を読みました。次の例を示します。

クラスclock、メソッド付きtime()

Class message、その 3 つのクラスはそれから継承します: Fax, Mail, Memo.

アプリケーションは、午前 12 時にメッセージを送信したいと考えています。

この本はオブザーバーパターンを推奨しています。メッセージを拡張する新しい class: を追加するVideoMsgと、クラス Clock の実装に影響することが示されています。しかし、私はその理由を理解していませんでした。クラス Clock は のオブジェクトのコレクションを保持しmessage、新しい継承クラスを追加しても、時計クラスは変更されません。

誰かが上記の例を説明するか、より良い例を挙げていただければ幸いです。

4

5 に答える 5

3

簡単に言えば、オブザーバーパターンを理解するために

1000人が毎日の新聞を購読した場合.

発行者は、新しいコピーが到着するたびに、つまり毎日購読者にコピーを送信します。

同じように、あるクラスは、新しい情報を取得するたびにオブザーバーに情報を送信します。

于 2012-04-26T10:38:18.903 に答える
1

オブザーバーである新しい新しいクラスはsubscribe、時計インスタンスでメソッドを呼び出すだけで、時計が午前 12 時になると、notifyObserversメソッドを呼び出し、サブスクライバーを反復処理してnotifyメソッドを呼び出し、現在午前 12 時であることを伝えます。 .

そして、ユーザーにメッセージを表示したり、呼び出し音を鳴らしたりなど、それぞれ独自の方法でこれに反応します。クロックの実装で何も変更する必要はありません。

于 2012-04-26T10:26:39.907 に答える
0

詳細が欠落していることに加えて、「メッセージ」は時計オブジェクトを監視して「アクション」を時間どおりにトリガーすると思います。「どのように」(観察)に応じて?これは実装されており、クロックの変更が必要になる可能性があります。オブザーバーパターンは、「私たちはあなたを呼んでいます-私たちを呼ばないでください」パターンです。これは基本的に、高価なビジー待機ループを防ぎます。

于 2012-04-26T11:07:57.953 に答える
0

正直なところ、例には実装の詳細があまりないため、答えを出すのは困難です。

Observer パターンでは、"Observed object" (サブジェクト) は Observer への参照を保持し、Subject は通常、Observer に送信する "メッセージ" を構築する責任があります。つまり、オブザーバーに新しいメッセージを通知する必要がある場合、サブジェクトの実装を変更する必要があります。これは、新しいメッセージがどのように構築されているかを認識する必要があるためです。

ただし、これは通常のオブザーバー パターンの実装を説明しているだけです。あなたが言ったように、件名がメッセージに依存しないようにすることができる状況や変種が多すぎます。

于 2012-04-26T10:23:32.527 に答える
0

本質は次のとおりです。

オブザーバーはオブザーバーの参照を保持する必要はありません。通知されたときの動作を記述するハンドラーを提供するだけです。

オブザーバー パターンを OO 理論の継承とポリモーフィズムと組み合わせると、コードがいかに柔軟になるかがわかります。

于 2012-04-26T10:45:44.030 に答える