オブザーバパターン
https://gyazo.com/680e069b2cd8422fba4435852c9c5b16
ジェスの監視人
Observer パターン(オブザーバ・パターン)とは、プログラム内のオブジェクトのイベント( 事象 )を他のオブジェクトへ通知する処理で使われるデザインパターンの一種。>
通知するオブジェクト側が、通知されるオブジェクト側に観察(英: observe)される形になる事から、こう呼ばれる。>
出版-購読型モデルとも呼ばれる。暗黙的呼び出しの原則と関係が深い。>
分散イベント処理システムの実装にも使われる。言語によっては、このパターンで扱われる問題は言語が持つイベント処理構文で処理される。
例えば、ゲームの実績システムにおいて、各条件を監視して達成したことを検知する設計として有効。
10回死ぬ
100回敵を倒す
牛を一度も殺さずにクリア
上記のような条件の実績のために、「死ぬ処理」や「敵を倒す処理」の中で実績用の if文を仕込むのは、実績システムがシステムのあちこちに散らばって保守性が下がる。
オブザーバパターンでは、死んだ時に死んだことをサブジェクトとして通知し、実績システムで通知を受け取って、条件を達成したかどうかをチェックする
これにより、死ぬ処理と実績チェック処理が分離される
別々の開発者が好きに自分のコードを実装できる
サブジェクトとオブザーバの破棄を管理すること
オブザーバを不用意に殺した後に、サブジェクトが通知しようとしてヌルポになったり
サブジェクトが死んだことを知らずに、ずっと監視し続けるオブザーバがいたり
疎結合になるメリットもあれば、デメリットもある
これが一番気をつけるポイント
実行してみないと、どんな順番・どんな通知制御が行われるか分からなかったりする
なんでもかんでもオブザーバパターンを適用すると可読性やデバッグの品質特性が下がりやすいので、適用する箇所は精査すること 英語原文
通常は、詳しいことは知らないけどより UI に近い側のコードが、アプリケーションのさらに深い処理の詳細実装を呼び出しますよね。ところが、UI の最末端であるブラウザのボタンコンポーネントは、それぞれのサービスのアプリケーションコードよりはるか前に実装され、完成しています。W3C の求めるとおりに作られたブラウザの UI 部品は、各種の SNS や EC サイトの機能なんて知るよしもありません。
HTML 上のボタンは、ただただ、クリックされましたよというシグナルを発するだけ。後から来たアプリケーション側が、そのシグナルを観測し、アプリケーション機能をトリガーする。というような、イベント発生とそのリスニングで DIP を実現するのが Observer (観測者) パターンです。 ChatGPTにオブザーバパターンのメリットとデメリットを整理してもらった kidooom.iconプログラミングのオブザーバパターンのメリットとデメリットを教えて
ChatGPT.icon
オブザーバパターンは、オブジェクト間の通信を行うためのデザインパターンの一つです。このパターンでは、複数のオブジェクトが、単一のオブジェクトの状態の変化に応じて処理を行うことができます。
メリット:
オブジェクト間の耦合性が低くなります。オブザーバとして登録されたオブジェクトは、その監視対象のオブジェクトに対して直接的に依存していないため、変更が影響を受けにくくなります。
耦合性は結合度のことらしい
処理を追加しやすいです。新しい処理を追加するためには、新しいオブジェクトを登録するだけで済みます。
スケーラビリティが高いです。複数のオブジェクトが監視対象のオブジェクトを監視することができるため、処理の追加や変更が容易です。
デメリット:
処理が遅くなることがあります。オブザーバが多いと、状態が変化したときに、全てのオブザーバに通知が行われるため、処理が遅くなる可能性があります。
メモリを消費する可能性があります。複数のオブザーバが登録されている場合、それら全てがメモリに保持されているため、メモリ消費量が増える可能性があります。
オブザーバが不要な場合には、登録を解除しないと、不要な処理が実行され続けるため、性能上の問題が発生する可能性があります。