ここでのすべての回答が、具体的な例を示すことなく、ObserverとPub / Subのパターンの微妙な違いを説明しようとしていたことを少し面白がっています。ほとんどの読者は、一方が同期で他方が非同期であるということを読んで、それぞれを実装する方法をまだ知らないに違いない。
注意すべきことは、これらのパターンの目標はコードを分離しようとすることです
オブザーバーは、オブジェクト(サブジェクトと呼ばれる)がオブジェクト(オブザーバー)に依存するオブジェクトのリストを保持し、状態の変化を自動的に通知する設計パターンです。
オブザーバーパターン
これは、(通常は関数である)observable object
すべてを保持するリストがあることを意味しますobservers
。そして、このリストをたどって、楽しいときにこれらの関数を呼び出すことができます。
詳細については、このオブザーバーパターンの例を参照してください。
このパターンは、オブジェクトのデータ変更をリッスンし、それに応じて他のUIビューを更新する場合に適しています。
しかし、短所はObservable
であり、オブザーバーを維持するために1つの配列のみを維持します(例では、配列はですobserversList
)。
notify function
その配列に格納されているすべての関数をトリガーするが1つしかないため、更新のトリガー方法は区別されません。
異なるイベントに基づいてオブザーバーハンドラーをグループ化する場合。私達はちょうどそれを変更する必要があるobserversList
のObject
と同様に
var events = {
"event1": [handler1, handler2],
"event2": [handler3]
}
詳細については、このpubsubの例をご覧ください。
そして人々はこのバリエーションをと呼びますpub/sub
。したがって、events
公開したに基づいてさまざまな機能をトリガーできます。