前回、オブザーバー モードについて勉強しましたが、多くの記事で、これは Subscribe/Publish (パブリッシュ/サブスクライブ モード) とも呼ばれると書かれていました。しかし、『JavaScript Design Patterns』という本では、これら 2 つのパターンの間にはまだいくつかの違いがあると記載されています。この本の元の言葉は次のとおりです:
1. オブザーバー モードでは、トピック通知を受け取りたいオブザーバーはコンテンツ変更イベントをサブスクライブする必要があります。
2.サブスクライブ/パブリッシュ モードは、サブスクライバーとパブリッシャー間のトピック/イベント チャネルを使用します。イベント システムを使用すると、サブスクライバが必要とする値を含むカスタム パラメータを渡すことができるアプリケーション固有のイベントをコードで定義できます。その目的は、サブスクライバーとパブリッシャー間の依存関係を回避することです。
オブザーバー パターンとは異なり、サブスクライバーが適切なイベント ハンドラーを実行して登録し、パブリッシャーからの通知を受信できるようになります。
わかりました、わかりません。私の理解は次のとおりです:
1. オブザーバー パターンでは、ターゲット オブジェクトがオブザーバーを維持します。パブリッシュ/サブスクライブ モデルでは、パブリッシャーはサブスクライバーについては考慮せず、メッセージをスローすることのみを担当します。
2. オブザーバー パターンでは、オブザーバーはインターフェイスを提供し、ターゲット オブジェクトが変更されたときにそのインターフェイスを呼び出して、自身の状態とターゲットの状態の一貫性を保つ必要があります。つまり、すべてのオブザーバーが統一されたインターフェイスを持っている必要があります (上で書いた update メソッドのように、全員のメソッドがこの名前である必要があります)。パブリッシュ/サブスクライブ モデルでは、サブスクライバー イベントのトリガーはそのようなインターフェイスには依存しませんが、特定のメッセージ (通常、このメッセージにはサブスクライバーが必要とする名前とパラメーターが含まれます) をリッスンすることによってサブスクライバーによってトリガーされます。サブスクライバーが監視しているのはパブリッシャーではなく、メッセージ プールであることがわかります。メッセージ プールに対象のメッセージがある限り、メッセージをパブリッシュした人に関係なく、イベントがトリガーされます。パブリッシャーとサブスクライバーは切り離されています。
以下は、js でのパブリッシュ/サブスクライブ モードの実装です。これをコピーしてコンソールに貼り付け、試してみてください。