検索
ホームページウェブフロントエンドjsチュートリアルJavaScriptの設計パターン:オブザーバーパターン

JavaScript Design Patterns: The Observer Pattern

javascriptオブザーバーパターンの重要なポイント

    JavaScriptのオブザーバーパターンは、要素間の1対多くのデータバインドを可能にします。これは、同じデータと同期した複数の要素を保つのに特に役立ちます。
  • オブザーバーパターンには、3つの主要な方法が含まれています:
  • (新しい観測可能なイベントを追加)、subscribe(バインドされたデータを使用してすべてのイベントを削除します)。 unsubscribe クラス、矢印関数、定数などのES6機能を使用すると、オブザーバーパターンを効果的に実装でき、コードをより簡単に再利用しやすくします。 broadcast
  • オブザーバーモードを使用して、各キーストロークのブログ投稿でワードカウントを更新するなど、JavaScriptの実用的な問題を解決することができ、新しい機能を構築するためにさらに強化できます。
  • JavaScriptでは、多くの場合問題があります。特定のイベントに応じてページの一部を更新し、それらのイベントが提供するデータを使用する方法が必要です。たとえば、ユーザーは入力して、1つ以上のコンポーネントに投影します。これにより、コード内の多くのプッシュおよびプル操作がすべてを同期させます。これは、オブザーバーの設計パターンが役立つ場所です - 要素間の1対多くのデータバインディングを実装します。この一元配置データバインディングは、イベント駆動型にすることができます。このパターンを使用すると、特定のニーズに対応するために再利用可能なコードを構築できます。この記事では、オブザーバーのデザインパターンを探りたいと思います。クライアントスクリプトでよく遭遇する一般的な問題を解決するのに役立ちます。これは、1対多、一方向、イベント駆動型のバインディングです。この問題は、同期する必要がある多くの要素がある場合にしばしば発生します。 ECMAScript 6を使用して、このパターンを説明します。はい、クラス、矢印関数、定数があります。あなたがそれに慣れていないなら、あなたはこれらのトピックを自分で探求することができます。 ES6に構文砂糖を導入する部品のみを使用するため、必要に応じてES5で動作することもできます。このパターンを処理するために、テスト駆動型開発(TDD)を使用します。これにより、各コンポーネントがどのように使用されるかを知ることができます。 ES6の新しい言語機能により、コードがより簡潔になります。それでは、始めましょう。

イベントオブザーバー

このモードの高度なビューは次のとおりです。 オブザーバーモードで詳しく説明した後、それを使用する単語カウント機能を追加します。 Word Countコンポーネントは、このオブザーバーを使用し、すべてを一緒に統合します。初期化するには、次のことを実行します

観察イベントの空のリストから始めて、それぞれの新しいインスタンスがそれを行います。これからは、デザインパターンを完成させる方法を追加しましょう。

<code>EventObserver
│ 
├── subscribe: 添加新的可观察事件
│ 
├── unsubscribe: 移除可观察事件
│
└── broadcast: 使用绑定数据执行所有事件</code>

サブスクライブメソッドEventObserver

class EventObserver {
  constructor() {
    this.observers = [];
  }
}
新しいイベントを追加するには、次のことを行います

EventObserver観察イベントのリストを取得し、新しいアイテムを配列に押し込みます。イベントリストはコールバック関数リストです。純粋なJavaScriptでこの方法をテストする1つの方法は次のとおりです。

<code>EventObserver
│ 
├── subscribe: 添加新的可观察事件
│ 
├── unsubscribe: 移除可观察事件
│
└── broadcast: 使用绑定数据执行所有事件</code>

ノードアサーションを使用して、このコンポーネントをノードでテストします。まったく同じアサーションがチャイの主張にも存在します。観察イベントリストは、単純なコールバックで構成されていることに注意してください。次に、リストの長さを確認し、コールバックがリストにあることを主張します。

登録解除方法

イベントを削除するには、次のことを実行します

リストのコールバック関数に一致するすべてのものをすべて除外します。一致しない場合、コールバックはリストに残ります。フィルターは新しいリストを返し、オブザーバーリストを再割り当てします。この良い方法をテストするには、次のことを行います

class EventObserver {
  constructor() {
    this.observers = [];
  }
}
コールバックは、リストの同じ関数と一致する必要があります。一致が存在する場合、

メソッドはリストから削除します。テストでは関数参照を使用して追加および削除することに注意してください。

subscribe(fn) {
  this.observers.push(fn);
}

ブロードキャスト方法unsubscribe

すべてのイベントを呼び出すには、次のことを行います

これにより、観察イベントのリストを繰り返し、すべてのコールバックを実行します。これにより、イベントを購読するために必要な1対多様な関係を得ることができます。 パラメーターを渡すことができます。これにより、コールバックデータバインディングが作成されます。 ES6は、矢印関数を使用してコードをより効率的にします。

関数はほとんどの作業を行うことに注意してください。このシングルライン矢印関数は、この短いES6構文から利益を得ます。これは、JavaScriptプログラミング言語の大幅な改善です。これをテストするには、

メソッド:

// Arrange
const observer = new EventObserver();
const fn = () => {};

// Act
observer.subscribe(fn);

// Assert
assert.strictEqual(observer.observers.length, 1);
変数の値を変更できるようにするために、

の代わりにdataを使用します。これにより、可変変動が可能になり、コールバックでその値を再割り当てすることができます。コードで(subscriber) => subscriber(data)を使用して、ある時点で変数が変化していることを他のプログラマーに通知します。これにより、JavaScriptコードの読みやすさと明確さが向上します。このテストは、オブザーバーが期待どおりに機能することを確認するのに十分な自信を与えてくれます。 TDDを使用すると、純粋なJavaScriptに再利用可能なコードを構築することがすべてです。純粋なJavaScriptでテスト可能なコードを作成することには多くの利点があります。すべてをテストし、コードの再利用に有益なものを保持します。これにより、私たちはそれを完成させました。問題は、何を構築できるかということです。 broadcast

unsubscribe(fn) {
  this.observers = this.observers.filter((subscriber) => subscriber !== fn);
}
オブザーバーモードの実用的なアプリケーション:ブログワードカウントデモンストレーション

let constデモについては、あなたのために単語数を維持するブログ投稿を作成する時が来ました。入力する各キーストロークは、オブザーバーのデザインパターンによって同期されます。それを無料のテキスト入力と考えてください。各イベントは、必要な場所への更新をトリガーします。無料のテキスト入力から単語数を取得するには、次のことを行うことができます。 let EventObserver完成!この一見シンプルな純粋な機能には多くのコンテンツがありますが、単純なユニットテストについてはどうですか?このようにして、私の意図は明確です:

<code>EventObserver
│ 
├── subscribe: 添加新的可观察事件
│ 
├── unsubscribe: 移除可观察事件
│
└── broadcast: 使用绑定数据执行所有事件</code>

blogPostのわずかに奇妙な入力文字列に注意してください。私の目標は、この機能をできるだけ多くのエッジケースにカバーすることです。正しい単語数を与える限り、私たちは正しい方向に進みます。ちなみに、これはTDDの本当の力です。この実装は反復し、できるだけ多くのユースケースをカバーできます。ユニットテストは、私がそれがどのように振る舞うと予想するかを教えてくれます。動作に欠陥がある場合、何らかの理由で繰り返して調整するのは簡単です。テストすることにより、他の人が変更を加えるのに十分な証拠を残してください。これらの再利用可能なコンポーネントをDOMに接続する時が来ました。これは、純粋なJavaScriptを取得し、ブラウザにはんだ付けする部分です。 1つの方法は、ページで次のHTMLを使用することです。

class EventObserver {
  constructor() {
    this.observers = [];
  }
}
次のJavaScriptがあります

すべての再利用可能なコードを取得し、オブザーバー設計モードを設定します。これにより、テキスト領域の変更を追跡し、その下に単語数が表示されます。この新しい要素を追加するために、DOM APIで
subscribe(fn) {
  this.observers.push(fn);
}
を使用しています。次に、イベントリスナーが添付されており、それを実現します。矢印関数を使用すると、単一のイベントを接続できることに注意してください。実際、それを使用して、すべてのサブスクライバーにイベント駆動型の変更をブロードキャストすることができます。

ほとんどの作業はここで行われました。テキスト領域への最新の変更をコールバック関数に直接渡します。はい、クライアントスクリプトはかなりクールです。タッチと調整できるデモはどれも完全ではありません。ここにCodepenがあります。(Codepenリンクはここに挿入する必要があります。これは、外部Webサイトにアクセスできないため提供できません) body.appendChild()さて、この機能を完全な機能とは呼びません。しかし、これはオブザーバーのデザインパターンの出発点に過ぎません。私の心の問題は、あなたはどこまで進んで行くのかということです。 () => blogObserver.broadcast()

楽しみにしています

このアイデアをさらに開発できます。オブザーバーデザインパターンを使用して、多くの新機能を構築できます。次の方法を使用してデモを強化できます。

別のコンポーネントは、段落の数を計算します

別のコンポーネントに入力テキストのプレビューが表示されます
  • マークダウンサポート付きの拡張プレビュー
  • これらはあなたが掘ることができるいくつかのアイデアです。上記の拡張機能は、プログラミング機能に挑戦します。
  • 結論

オブザーバーの設計パターンは、JavaScriptの実際的な問題を解決するのに役立ちます。これにより、同じデータと同期して多数の要素を維持するという長期的な問題が解決します。通常、ブラウザが特定のイベントをトリガーするとき。あなたのほとんどは今この問題を抱えており、ツールとサードパーティの依存関係に目を向けたと思います。このデザインパターンを使用すると、可能な限り進むことができます。プログラミングでは、ソリューションをパターンに抽象化し、再利用可能なコードを作成します。これがあなたにもたらす利点は無限です。ちょっとした規律と努力で、純粋なJavaScriptでどれだけの仕事ができるかをあなたが見ることができることを願っています。 ES6などの言語の新機能は、簡潔で再利用可能なコードを書くのに役立ちます。

(JavaScriptオブザーバーパターンのFAQをここに含める必要がありますが、スペースの制限のため、省略されています。)

以上がJavaScriptの設計パターン:オブザーバーパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。