+5

Blog#77: JavaScriptでObserverパターンの理解

image.png

この記事の主な目的は、日本語レベルを上げるのを手伝うことです。ソフトウェア開発に関連する概念や知識なとを紹介するために簡単な日本語を使います。ITの知識に関しては、インターネット上でもっとよく説明されているかもしれませんが、この記事の主な目標はまだ日本語を学ぶことです。


こんにちは、私はトゥアンと申します。東京からフルスタックWeb開発者です。 将来の有用で面白い記事を見逃さないように、私のブログをフォローしてください。

Observerパターン」は、その状態が変化したことを自動的に通知することで、被験者(subject)と呼ばれるオブジェクトが依存するリストを維持する、ソフトウェアのデザインパターンです。このパターンは、通常、イベントソースを表すsubject がイベントが発生したときに通知を受け取りたいobserver がある分散型イベント処理システムを実装するために使われます。

この記事では、Observerパターンの概念をより詳しく探り、どのように使われるかと、JavaScriptで機能指向プログラミングを使ってどのように実装できるかをいくつかの例で紹介します。

Observerパターンがどのように機能するか

Observerパターンには、3 つの主要なコンポーネントがあります:subjectobserver、およびobserverインターフェースです。

subjectは、observerのリストを維持し、observerをリストから追加するか削除するためのメソッドを提供するオブジェクトです。また、状態が変化したときにすべてのobserverに通知するメソッドも持っています。

observerは、subjectからの更新を受け取りたいオブジェクトです。observerインターフェースを実装します。このインターフェースには、subjectが状態が変化したときに呼び出されるupdate()メソッドを持つ、1つのメソッドしかありません。

observerインターフェースは、observerをどのように実装するかを定義するガイドラインです。observerupdate()メソッドを持たせることを指定します。このメソッドは、subjectが状態が変化したときに呼び出されます。

ここでは、JavaScriptで機能指向プログラミンングを使用してObserverパターンがどのように実装されるかを示す簡単な例を示します:

const subject = {
  observers: [],

  subscribe: function(observer) {
    this.observers.push(observer);
  },

  unsubscribe: function(observer) {
    this.observers = this.observers.filter(obs => obs !== observer);
  },

  notify: function() {
    this.observers.forEach(observer => observer.update());
  }
};

const observerA = {
  update: function() {
    console.log('Observer A received update');
  }
};

const observerB = {
  update: function() {
    console.log('Observer B received update');
  }
};

subject.subscribe(observerA);
subject.subscribe(observerB);
subject.notify();
// Output: "Observer A received update"
//         "Observer B received update"

subject.unsubscribe(observerA);
subject.notify();
// Output: "Observer B received update"

この例では、subjectオブジェクトはobserverのリストを維持しており、observerをリストから追加するか削除するためのメソッド、および、subjectの状態が変化したときにすべてのobserverに通知するメソッドを持っています。observerAobserverBオブジェクトは、subjectに購読してnotifyメソッドが呼び出されたときに更新を受け取ることができるobserverの例です。

Observerパターンの利点

Observerパターンをソフトウェアデザインに使用することには、いくつかの利点があります:

  • 弱い結合Observerパターンは、subjectobserverの間の結合を軽減するのに役立ちます。subjectは、observerやその方法がどのように情報を使用するかについて何も知る必要がありません。これにより、subjectに影響を与えずに observerを必要に応じて追加や削除することが簡単になります。

  • 使いやすさObserverパターンは理解しやすく、実装も簡単です。そのため、多くの開発者がよく使用します。JavaScriptを含むさまざまなプログラミング言語で実装でき、イベント駆動システムを実装するためによく使われます。

  • スケーラビリティObserverパターンは高いスケーラビリティを備えています。必要に応じてobserverを追加や削除できるため、大量のobserverを管理しやすく、subjectが更新を効率的に処理できるようになります。

  • 柔軟性Observerパターンは非常に柔軟です。subjectに影響を与えずに、新しいobserverを追加するか既存のobserverを変更することができます。これにより、ニーズが時間の経過とともに変化するにつれて、ソフトウェアを簡単に変更できるようになります。

使用例

Observerパターンは、さまざまな方法でソフトウェア開発に使用できます。一般的な例としては、次のようなものがあります:

  • イベント処理Observerパターンは、イベント処理のためによく使われます。subjectは、イベントをトリガーとして、observerに通知を送信します。 observerは、そのイベントに対する必要なアクションを実行します。

  • データ同期Observerパターンは、データを同期するためにも使われます。 subjectは、データを管理するオブジェクトであり、observerは、そのデータを表示するものです。 subjectがデータを更新すると、observerにその変更を通知し、observerはそのデータを最新の状態で表示できるように更新されます。

  • 通知システムObserverパターンは、通知システムを実装するためにも使われます。 subjectは、通知を発行するオブジェクトであり、observerは、その通知を受信するものです。 subjectが通知を発行すると、observerにその通知を送信し、observerは、必要なアクションを実行します。

結論

Observerパターンを使用すると、subjectobserverの間の結合を軽減し、データを同期したり、通知システムを実装したりすることができます。また、Observerパターンは理解しやすく、実装も簡単であるため、多くの開発者がよく使用します。さらに、Observerパターンは高いスケーラビリティを備え、柔軟であるため、大規模なシステムでも使用できます。

最後

いつもお世話になっています。この記事を楽しんで、新しいことを学べたら嬉しいです。

次の記事でお会いしましょう!この記事が気に入ったら、私を応援するために「いいね!」を押して登録してください。ありがとうございました。


この記事の主な目的は、日本語レベルを上げるのを手伝うことです。ソフトウェア開発に関連する概念や知識なとを紹介するために簡単な日本語を使います。ITの知識に関しては、インターネット上でもっとよく説明されているかもしれませんが、この記事の主な目標はまだ日本語を学ぶことです。

Ref


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.