js オブザーバーモードの紹介と使用

js オブザーバーモードの紹介と使用

このケースを通じて、オブザーバー パターン内のさまざまなオブジェクトと機能を区別できるようになります。次にコーディング

4. コーディング

1. フロントデスクの女性(通知者)

/*
 * desc: 通知クラス* 1. オブザーバーを保存* 2. オブザーバーを追加* 3. オブザーバーを削除* 4. オブザーバーに通知*/
クラス Dep {
    コンストラクタ() {
        //ストレージオブザーバー this.subs = []
    }

    /**
     * オブザーバーを追加 * @param {オブザーバーオブジェクト} sub 
     */
    サブルーチンを追加します(サブルーチン) {
        // すべてのオブザーバーに更新メソッドがあることを確認する if (sub && sub.update) {
            this.subs.push(サブ)
        }
    }

    /**
     * オブザーバーを削除 * @param {削除するオブザーバーオブジェクト} sub 
     */
    サブルーチンを削除します
        this.subs.forEach((item, index) => {
            if (sub.id === item.id) {
                this.subs.splice(インデックス、1)
                戻る;
            }
        })
    }

    /**
     * オブザーバーに通知し、すべてのオブザーバー内で更新メソッドを呼び出し、自身の状態を変更します * */
    通知() {
        this.subs.forEach(sub => {
            サブ.更新()
        })
    }
}

2. プログラマクラス(オブザーバークラス)

/**
 * オブザーバーオブジェクト */
クラスウォッチャー{
    コンストラクタ(名前) {
        this.name = 名前
    }

    //オブザーバーオブジェクトには、作業ステータスを変更するための独自の更新メソッドがあります。update() {
        console.log(`${this.name} は通知を受信し、作業ステータスを変更しました。`)
    }
}
/**
 * オブザーバーオブジェクト */
クラスウォッチャー{
    コンストラクタ(名前) {
        this.name = 名前
    }

    //オブザーバーオブジェクトには、作業ステータスを変更するための独自の更新メソッドがあります。update() {
        console.log(`${this.name} は通知を受信し、作業ステータスを変更しました。`)
    }
}

3. 上司が会社に戻り、フロントデスクの女性がプログラマーに通知するのをシミュレートします。

 <script src="./js/Dep.js"></script>
 <script src="./js/Watcher.js"></script>
 <スクリプト>
        // 同僚の張三 const tongshi1 = new watcher("張三")

        // 同僚 Li Si const tongshi2 = new watcher("Li Si")

        // フロントデスクの女性は、どの同僚に通知する必要があるかを把握し、通知する必要がある同僚を収集する必要があります。const xiaojiejie = new Dep();
        xiaojiejie.addSubs(tongshi1)
        xiaojiejie.addSubs(tongshi2)

        //ボスが戻ってくるのを待っています...
        // 待って、待って...
        // 待って、待って...
        // 待って、待って...
        // 待って、待って...
        // ボスが戻ってきた // ボスが戻ってくると、フロントデスクの女性は自分の通知メソッドを呼び出して、プログラマーに自分のステータスを変更するように通知しますxiaojiejie.notify()
    </スクリプト>

Java デザインパターンにおけるオブザーバーパターンの導入と使用背景に関するこの記事はこれで終わりです。より関連性の高いオブザーバーパターンのコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。皆様の今後の 123WORDPRESS.COM へのご支援をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript でオブザーバー パターンを実装する方法
  • js オブザーバー モード 弾丸 スクリーン ケース
  • JavaScript デザイン パターン: オブザーバー モードとパブリッシュ サブスクライブ モードの詳細な説明
  • JavaScript デザイン パターン - オブザーバー パターンの原則と使用例
  • ネイティブ js で実装されたオブザーバー モードとサブスクライバー モードの簡単な例
  • JavaScript オブザーバー パターンの原則と使用例
  • Javascriptでオブザーバーモードを実装する方法を教えます

定義

オブザーバー パターンは 1 対多の依存関係を定義し、複数のオブザーバー オブジェクトが同時にサブジェクト オブジェクト (通知オブジェクト) を監視できるようにします。サブジェクト オブジェクトは、監視対象オブジェクトの変更を監視すると、すべてのオブザーバー オブジェクトに通知して、各オブザーバー オブジェクトが自身を更新できるようにします。

ここではいくつかの役割が関与しており、それぞれに次のような機能があります。

  1. オブザーバーオブジェクト: 自身を更新できる
  2. 対象オブジェクト: オブザーバーの追加、削除、通知が可能
  3. オブザーバー: 対象オブジェクトによって監視されます。監視対象オブジェクトが変更されると、対象オブジェクトはオブザーバーにステータスの更新を通知します。

2. 使用シナリオ

1つのオブジェクトを変更すると、同時に他のオブジェクトも変更する必要があり、変更する必要があるオブジェクトの数を知る必要がない場合

3. 例を挙げる

概念の説明がわかりにくくて理解しにくい場合は、日常生活からの例を挙げて説明してください。

シナリオ 1:

オフィスビル内のパソコンの前。プログラマーの一団は、上司が出張中であることを利用し、コンピューターで NBA の試合を観戦しながら、時折興奮して叫んでいた。ちょうどそのとき、出張から帰ってきた上司が偶然彼らと遭遇し、気まずい状況になってしまいました。

解決:

会社でサボっていたところ、上司に見つかってしまうのを避けるために、数人がフロントの女性に賄賂を贈る計画を立てました。上司が再び会社に来た時、その女性はすぐにプログラマーたちに知らせ、仕事に戻るように頼みました。

シナリオ2:

オフィスビル内のパソコンの前。プログラマーの一団は、上司が出張中であることを利用し、コンピューターで NBA の試合を観戦しながら、時折興奮して叫んでいた。この時、上司が出張から帰ってきました。フロントの女性はボスが戻ってくるのを見て、すぐに試合を観戦していた男たちに知らせました。この時、若者たちはすぐに仕事モードに切り替わりました。

シナリオ 2 では、オブザーバー パターンを使用します。上司が戻ってきたら、プログラマーはパドリング ステータスを変更する必要があり、フロント デスクの女性がそれを通知する責任があります。

役割関数
プログラマーオブザーバーステータスを変更できます
フロントの女性件名(通知者)通知が必要なプログラマ(オブザーバー)を収集、削除、保存し、プログラマに通知を送信します。
ボスオブザーバーフロントデスクの女性に観察された

<<:  MySQL 挿入時間の 8 時間の違いの問題の解決方法

>>:  CentOS8でyumソースを変更した後にウェアハウスキャッシュの同期に失敗する問題の詳細な説明

推薦する

Reactを使用して画像認識アプリを実装する方法

まずは効果の写真をお見せしましょう。 個人的には効果は問題ないと思います。アプリが写真を学習する時間...

httpsウェブサイトにリファラーhttpsとhttpジャンプリファラーを送信させる方法

この記事では、HTTP プロトコルのリファラーのメタデータ パラメータの提案について説明します。この...

マージンのマージの問題を解決する

1. 兄弟要素の余白を結合する効果は次のようになります: (2 つの間の間隔は 150 ピクセルでは...

いくつかの一般的な CSS レイアウト (要約)

まとめこの記事では、次の一般的なレイアウトを紹介します。 3 列レイアウトを実装する方法は多数ありま...

vite2.0+vue3 モバイルプロジェクトの詳細な説明

1. 関連する技術的なポイントバイト版ヴュー3 ts統合ルーティングvuexを統合するAxiosを統...

mysql 行列変換サンプルコード

1. 需要3 つのテーブルがあります。一定期間にわたるさまざまな抗生物質感受性の結果、つまり rep...

フォーム内の無効なフォームフィールドの値を送信する方法 サンプルコード

フォーム内のフォーム フィールドが無効に設定されている場合、フォーム フィールドの値は送信されません...

MySQL 5.7 における部分テーブルのデュアルマスター同期の実装プロセスの詳細な説明

序文最近、私はある要件に遭遇しました。会社の業務上、2 つのデータベース間の一部のテーブルは、リアル...

Nginx リバース プロキシはポート 80 のリクエストを 8080 に転送します

まず、一連の概念を理解しましょう。nginx リバース プロキシとは何でしょうか?リバース プロキシ...

Linux で大きなファイルの指定された内容を見つける方法

大きなことも小さなことも考えて、方向転換しましょう。 Linux では非常に大きなファイルに遭遇する...

163 メールボックスログインボックスインタラクティブデザインの改善体験と共有

LOFTER のコンテストで、ログイン ボックスを再設計できると言及されているのを見ました。過去 2...

MySQL ファジークエリステートメントコレクション

SQL ファジークエリステートメント一般的なファジーステートメントの構文は次のとおりです。 SELE...

Mysql WorkBench のインストールと設定のグラフィックチュートリアル

この記事では、Mysql WorkBenchのインストールと設定のグラフィックチュートリアルを参考ま...

Linux システムで TCP 接続を作成するプロセスの紹介

目次LinuxでTCPを作成する手順サーバクライアントTCP確立プロセスサンプルコードLinuxでT...

VMware15/16 VMwareのロックを解除してMacOSをインストールする詳細な手順

VMware バージョン: VMware-workstation-full-16 VMware バー...