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