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ソースを変更した後にウェアハウスキャッシュの同期に失敗する問題の詳細な説明

推薦する

Lua モジュールを使用して WAF を実装する Nginx の原理の分析

目次1. WAFの背景2. WAFとは3. 動作原理4. WAF機能5. WAFと従来のファイアウォ...

Windows での MySQL 8.0.15 のインストールと設定方法のグラフィック チュートリアル

この記事では、参考までにMySQL 8.0.15のインストールと設定方法のグラフィックチュートリアル...

Centos8 で yum を使用して mongodb 4.2 をインストールする方法

1. リポジトリファイルを作成するmongodb の公式インストール ドキュメントを参照し、次のスク...

Ubuntu 20.04 と NVIDIA ドライバーのインストールに関するチュートリアル

Ubuntu 20.04をインストールする NVIDIAドライバーをインストールする Pytouch...

MySql テーブル内の行を削除する実用的な方法

まず、どのフィールドまたはフィールドの組み合わせがデータ行を一意に識別できるかを決定する必要がありま...

MySQL方言の簡単な紹介

データベースはさておき、人生における方言とは何でしょうか?方言とは、ある場所特有の言語です。他の場所...

Vueでのバスの使用に関する詳細な説明

Vue バス メカニズム (バス) vuex を使用するだけでなく、vue 内の親子以外のコンポーネ...

VUEをベースにしたシンプルな学生情報管理システムの実装

目次1. 主な機能2. 実装のアイデア3. コードの実装4. エフェクト表示V. 結論1. 主な機能...

MySQL の count()、group by、order by の詳細な説明

最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...

Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明

1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...

MySQLクエリ最適化に必須の知識ポイントのまとめ

序文クエリの最適化は一夜にして達成できるものではありません。対応するツールの使い方を学び、他の人の経...

詳細なLinuxインストールチュートリアル

(Win7 システム) VMware 仮想マシンのインストール チュートリアルVMware は仮想マ...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル (Windows 版)

1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...

JavaScript の継承についてどれくらい知っていますか?

目次序文コンストラクタ、プロトタイプオブジェクト、インスタンスオブジェクトの関係プロトタイプチェーン...

cmd と python での MySQL の一般的な操作についての簡単な説明

環境設定1: MySQLをインストールし、MySQLのbinディレクトリを環境変数に追加する環境設定...