私が理解しているように、オブザーバーパターンは、複数のオブザーバーが単一のサブジェクトをモニターすることを可能にします。反対のシナリオのパターンはありますか?いくつかのサブジェクトを監視し、いずれかがNotifyイベントを起こしたときに応答する単一のオブザーバのパターンがありますか?オブザーバーパターンの反対は何ですか?
答えて
Observerパターンを使用することもできます。多くの監視オブジェクトに対してオブザーバと同じオブジェクトレジスタを使用するだけです。オブザーバオブジェクトがイベントを報告するオブジェクトに適切なアクションを選択できるように、ある種の観測オブジェクト識別子( "this"ポインタ、一意のID番号など)を受け取るように "Notify"イベントを設定することをお勧めします。
私の考えはまさに。これは私にとってオブザーバーパターンのように聞こえる。 –
イベントハンドラが1回だけ実行されることを望んでいない限り、パブリッシャがイベントを発生させる回数は関係ありません。 –
これに追加するにはhttp://sourcemaking.com/design_patterns/observer(単一のオブザーバを使用することは「デザイナーの裁量に委ねられます」)、およびhttp://www.eecho.info/Echo/design-pattern/observer-java-pattern /(バリアントは「シングルオブザーバーと複数のオブザーバー」です) – anon
はい。これはオブザーバパターンのもう一つの応用です。
オブザーバーは、多くの科目に自分自身を追加します。 あなたが観測している対象に関係なく同じアクションを実行したい場合は、使用しているオブザーバパターンとまったく同じです。
イベントをトリガーしたサブジェクトに応じて別のアクションを実行する場合は、ObserverのActionPerformedメソッドに渡されるActionパラメータを使用して、どのサブジェクトがイベントをトリガしたかを判断できます。 (これらの名前は、使用する言語または選択したライブラリによって異なる場合があります)
ありがとう、呉、私の質問に答える時間を取ってくれた。 – blueshift
イベントを発生させる監視オブジェクトの数に関係なく、オブザーバを一度だけ反応させたい場合は、イベントハンドラの一部を "最初のソースがイベントを発生させたときにオブザーバーを他のすべてのソースから登録解除するか、別の(または同じソースが一定の間隔をおいて再度)イベントをいつ決定するかを決定する必要があります。オブザーバーに再び反応させてください...
Notifyイベントを発生させた後でサブジェクトを無効にしたいので、ここであなたのアドバイスを使いたいかもしれません。 – blueshift
オブザーバーのモニターが似ている場合は、オブザーバーにそれらをすべて監視させることができます。そうでない場合は、モンテルを分離してください。単一責任規則。
関連するメディエーターパターンも考慮してください。ここ
Mediatorパターンは、オブジェクトのセットは、(Wikipedia)をどのように相互作用するかをカプセル化するオブジェクトを定義し
さらに詳しい情報:http://sourcemaking.com/design_patterns/mediator
私も非常にMediator Vs Observer Object-Oriented Design PatternsにCDCの答え@のように:
オブザーバーパターン:1対多のdepを定義します。 1つのオブジェクトが状態を変更したときに、そのすべての従属物が自動的に通知され、更新されるように、オブジェクト間の終了性。
メディエーターパターン:オブジェクトセットの相互作用をカプセル化するオブジェクトを定義します。メディエータは、オブジェクトが明示的に相互参照するのを防ぐことで、疎結合を促進し、相互作用を個別に変更することができます。
- 1. od(1)の反対は何ですか?
- 2. evt.preventDefault()の反対は何ですか?
- 3. `unpack(" m ")`の反対は何ですか?
- 4. SelectManyの反対は何ですか?
- 5. lodashでは、 `pairs()`の反対は何ですか?
- 6. Lodash: `_uniq()`の反対は何ですか? lodashで
- 7. RubyでArray#rejectの反対は何ですか?
- 8. Laravel - 1対多の関係でsaveメソッドの反対は何ですか?
- 9. javascriptの(objの "key")の反対は何ですか?
- 10. このフルテキスト検索の反対は何ですか?
- 11. 相続の反対側の部分は何ですか?
- 12. この論理文の反対は何ですか
- 13. jQueryの "change()"イベントの反対は何ですか?
- 14. Notepad ++:JSFormatの「反対の」形式とは何ですか?
- 15. ChannelFactory <TChannel> .CreateChannelとは何が反対ですか?
- 16. 「git fetch」の反対は何でしょうか?
- 17. "xset"の反対は何ですか? "xget"コマンドはありますか?
- 18. __add__の反対ですか?
- 19. assert_selectの反対ですか?
- 20. オブザーバーパターンまたはコールバック?
- 21. オブザーバーパターン - バリアント
- 22. オブザーバーパターンの理解
- 23. ストップウォッチのオブザーバーパターン
- 24. オブザーバーパターンのASP.NETページ
- 25. Pythonのオブザーバーパターン
- 26. オブザーバーパターンのユニットテスト
- 27. オブザーバーパターンの関係
- 28. PHPはarray_filterの反対ですか?
- 29. 反対の 'onFocus'の反対
- 30. C#のこの暗号化+圧縮コードの反対は何ですか?
これは、Observableが複数あるObserverのようなものです。したがって、Observableはすべて、その状態が変化したときに単一のObserverを更新し、その更新(Observable o、Object arg)が呼び出されたときにObservableが異なるObservableを区別することができます。 –
実行時にObservableを新しいObservableに動的に登録する必要があるということは、ここで唯一の変更だと感じています。新しい観察可能性が生まれたときの意味。これを登録するにはObserverに通知する必要があります。もう一つの方法は、新しいオブザーバーが起きたときです。このObserverオブジェクトは常にそのコンストラクタにObservableで構築されます。したがってObservableコンストラクタのようなものは、それが起動されたときに単一のObserverを受け入れるべきです。 –