オブザーバーパターンとは何ですか?
シナリオシミュレーション
コードの実装//Observer デザイン パターン //Publisher-->Merchant var shopObj = {}; //商品リスト[key:[]]、キーは商品名です shopObj.list = []; //サブスクリプションメソッド shopObj.listen = function ( key, fn) { // keyは製品モデル、fnはサブスクリプションの動作 if (!this.list[key]) { this.list[キー] = []; } this.list[key].push(fn); //製品名キーを使用して製品リストにサブスクリプションを追加します} //メッセージ公開メソッド shopObj.publish = function (key) { //var key = arguments[0]; //パラメータキーを渡さない場合は、次のようにすることもできます。var fns = this.list[key]; // (var i = 0; i < fns.length; i++) の場合 { for(var i = 0 ,fn; fn = fns[i++];){ // サブスクライブされた関数 fn argumentmnts を実行してすべての引数を保存します // var fn = fns[i++]; fn.apply(これ、引数) } } // ユーザーAがサブスクリプションを追加しますshopObj.listen("Huawei", function (brand, model) { console.log("ユーザー A が受け取ったメッセージ: " + ブランド + モデル + "携帯電話の価格が値下げされました"); }) // ユーザー B がサブスクリプションを追加 shopObj.listen("Huawei", function (brand, model) { console.log("ユーザー B が受信したメッセージ: " + ブランド + モデル + "携帯電話の価格が値下げされました"); }) //c ユーザーがサブスクリプションを追加しますshopObj.listen("小米", function (brand, model) { console.log("ユーザー C が受信したメッセージ: " + ブランド + モデル + "携帯電話の価格が値下げされました"); }) //Double 11 加盟店が Huawei の値下げに関する情報を公開shopObj.publish("Huawei", "p30"); shopObj.publish("小米", "Mix4"); コードのリファクタリング//オブザーバー設計パターン var Eevent = { //製品リスト[キー:[]]、キーは製品名リスト:[]、 //サブスクリプションメソッド listen: function (key, fn) { // key は製品モデル、fn はサブスクリプションの動作 if (!this.list[key]) { this.list[キー] = []; } this.list[キー].push(fn); }, //メッセージを発行するメソッド publish: function (key) { //var key = arguments[0]; //パラメータキーを渡さない場合は、次のようにすることもできます。var fns = this.list[key]; // (var i = 0; i < fns.length; i++) の場合 { (var i = 0, fn; fn = fns[i++];) の場合 { // サブスクライブされた関数 fn argumentmnts を実行してすべての引数を保存します // var fn = fns[i++]; fn.apply(これ、引数) } } } //オブザーバーオブジェクトの初期化 var initEvent = function (obj) { (変数 i 内の Eevent) { obj[i] = イベント[i]; } } //パブリッシャー->販売者 var shopObj = {}; イベントを初期化します。 // ユーザーAがサブスクリプションを追加しますshopObj.listen("Huawei", function (brand, model) { console.log("ユーザー A が受け取ったメッセージ: " + ブランド + モデル + "携帯電話の価格が値下げされました"); }) // ユーザー B がサブスクリプションを追加 shopObj.listen("Huawei", function (brand, model) { console.log("ユーザー B が受信したメッセージ: " + ブランド + モデル + "携帯電話の価格が値下げされました"); }) //c ユーザーがサブスクリプションを追加しますshopObj.listen("小米", function (brand, model) { console.log("ユーザー C が受信したメッセージ: " + ブランド + モデル + "携帯電話の価格が値下げされました"); }) //Double 11 加盟店が Huawei の値下げに関する情報を公開shopObj.publish("Huawei", "p30"); shopObj.publish("小米", "Mix4"); 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: SWFObjectを使用すると、HTMLにFlashを挿入する際のブラウザ互換性の問題を完全に解決できます。
目次Rractとは何ですか?背景React スキャフォールディングJSXとは何かRractとは何です...
目次1. 概要1.1 厳密モードとは何ですか? 1.2 厳密モードの目的2. 厳密モードを有効にする...
目次1. はじめに1.1 原則1.2 プロセス1.3 特徴1.4 githubアドレス2. テスト環...
1. 兄弟要素の余白を結合する効果は次のようになります: (2 つの間の間隔は 150 ピクセルでは...
目次rocketmqイメージを取得する名前rvを作成する単一のブローカーノードを作成するrocket...
序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...
目次1. フォークの起源2. 初期のUNIXオーバーレイ技術3. UNIXに導入される前のフォークの...
序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...
ホストとコンテナ間でファイルを転送するには、コンテナの完全な ID が必要です。取得方法は以下の通り...
目次序文グローバルロックテーブルロックテーブルロックメタデータ ロック (MDL ロック)要約する参...
ネットワーク セキュリティは非常に重要なトピックであり、サーバーはネットワーク セキュリティにおける...
PHP7が出たので、最新バージョンのファンとしては、早速アップグレードして体験してみました。しかし...
Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...
アパッチ スカイウォーキングApache SkyWalking は、マイクロサービス、クラウド ネイ...
以前、プロジェクトを行う際に ECharts を使用しました。今日はそれをメモとして整理し、より多く...