JavaScript デザインパターン プロキシパターンの学習

JavaScript デザインパターン プロキシパターンの学習

概要

プロキシ パターンは、デザイン パターンの中でも構造デザイン パターンに属します。

意味:

名前が示すように、オブジェクトへのアクセスを制御するために、オブジェクトの代替またはプレースホルダーを提供します。

俗語による説明:

多くの有名人にはエージェントがいます。商業公演やコンサートのためにエージェントに連絡したい場合は、まずエージェントに連絡する必要があります。エージェントと協力事項について話し合った後、エージェントはそれを有名人に伝え、有名人は活動に参加します。家を借りる場合も同じです。家を借りる場合でも買う場合でも、私たちの最初の反応は間違いなくLianjiaのようなプラットフォームを見つけることです。なぜなら、私たちはLianjiaと連絡を取るだけでよく、Lianjiaが家主と連絡を取るので、家主と直接連絡を取る手間が省けるからです。Lianjiaは代理店モデルであるため、家主の住宅リソースのエージェントとして機能します。

実装

例えば:

スター チェイサーとして、あなたはスターの熱心なファンです。たまたまそのスターの誕生日が近づいており、あなたは自分の気持ちを表現するために贈り物を送ろうとしています。通常の手順は次のとおりです。

var ファン = {
    花(){
        star.reception("花");
    }
}

var スター = {
    受付:関数(ギフト){
        console.log("ファンから受け取りました: "+ギフト);
    }
}

Fans.flower(); //ファンから花を受け取る

あなたは、彼女があなたの愛を感じてくれることを願って、花を買って彼女に送ることを選びました。しかし、理想は満ち溢れていて、現実はとても貧弱であることが多いのです。エージェントを忘れないでください。贈り物にサインするのはスター本人ではなく、エージェントであることが多いからです。

var ファン = {
    花(){
        Agent.reception("花");
    }
}

var エージェント = {
    受付:関数(ギフト){
        console.log("ファンからの贈り物: "+gift); //ファンからの贈り物: flowersstar.reception("flowers");
    }
}
var スター = {
    受付:関数(ギフト){
        console.log("ファンから受け取りました: "+ギフト);
    }
}

Fans.flower(); //ファンから花を受け取った

ここでのエージェントは単なるエージェントです。ファンはまずエージェントに贈り物を渡し、その後エージェントがそれをスター本人に渡します。

保護エージェント

ファンから送られてきた小包を見てスターは大喜びし、それを開けてみると、花が入っていたことが分かった!スターは非常に軽蔑していたので、彼はエージェントに、今後私に花を送ってきた人はもう送らないで、自分で対処するように言いました。

var ファン = {
    花(){
        Agent.reception("花");
    }
}

var エージェント = {
    受付:関数(ギフト){
        console.log("ファンからのギフト: "+gift); //ファンからのギフト: flowersif(gift != "flowers"){
            star.reception("花");
        }
      
    }
}
var スター = {
    受付:関数(ギフト){
        console.log("ファンから受け取りました: "+ギフト);
    }
}

ファン.flower();

上記の番組では、ファンが送った花束をスターがまったく受け取らなかったが、それはエージェントによって傍受され、処理されたためである。エージェントを通して一部の贈り物をフィルタリングすることを保護エージェントと呼ぶ。

仮想エージェント

もしスターたちがファンから送られた花を受け取らないのであれば、ファンは考え方を変えて、スターたちが欲しいものを買えるようにお金をあげればいいのです!そこで彼はエージェントを探し、そのエージェントに現金100万ドルを渡し、それをスター本人に渡すように頼んだ。

関数 Money(){
    this.total = "現金100万"
   this.total を返します。
}
var ファン = {
    花(){
        エージェント.受信();
    }
}

var エージェント = {
    受付:関数(){
        // console.log("ファンからのギフト: "+gift);
        money = new Money();
        star.reception(お金.合計);
      
    }
}
var スター = {
    受付:関数(ギフト){
        console.log("ファンから受け取りました: "+ギフト); //ファンから受け取りました: 現金 100 万}
}

ファン.flower();

スターは 100 万ドルを受け取ったとき、とても喜びました。100 万ドルは使われなかったため、エージェントによって傍受およびフィルタリングされませんでした。そのため、スターはそれを直接受け取りました。このモデルを仮想エージェント モデルと呼びます。

画像の遅延読み込みを実現する仮想プロキシ

プロキシがない場合、コードは次のようになります。

// エンティティオブジェクトを作成する var myImage = (function(){
  // タグを作成します var imgNode = document.createElement( 'img' );
  // ページに追加 document.body.appendChild( imgNode );
  戻る {
    // 画像のsrcを設定する
    setSrc: 関数(src) {
      // ソースを変更
      src を src にコピーします。
    }
  }
})();

myImage.setSrc( 'http:// image.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );

仮想エージェント

// エンティティオブジェクトを作成する var myImage = (function(){
  // タグを作成します var imgNode = document.createElement( 'img' );
  // ページに追加 document.body.appendChild( imgNode );
  戻る {
    // 画像のsrcを設定する
    setSrc: 関数(src) {
      // ソースを変更
      src を src にコピーします。
    }
  }
})();

// プロキシオブジェクトを作成する var proxyImage = (function(){
  // 新しい img タグを作成します var img = new Image;
  // 画像読み込み完了イベント img.onload = function(){
    // src メソッドを置き換えるには myImage を呼び出します myImage.setSrc( this.src );
  }
  戻る {
    // プロキシ設定アドレス setSrc: function( src ){
      // プリロード読み込み
      myImage.setSrc( 'file:// /C:/Users/svenzeng/Desktop/loading.gif' );
      // 通常の画像アドレスを割り当てます img.src = src;
    }
  }
})();

proxyImage.setSrc( 'http:// image.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );

上記のコードでは、プロキシ モードを使用して画像のプリロードを実装しています。プロキシ モードでは、画像の作成とプリロード ロジックが巧みに分離されていることがわかります。将来、プリロードが不要になった場合は、リクエスト プロキシ オブジェクトではなく、リクエスト ボディを変更するだけです。

以上がJavaScriptデザインパターン学習におけるプロキシパターンの詳しい内容です。JavaScriptデザインパターンについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • JavaScript デザイン パターンのプロキシ モード
  • JavaScript デザインパターン 3: プロキシモードの詳細な説明
  • JavaScript デザインパターン プロキシパターン 例の分析
  • JavaScriptデザインパターンにおけるプロキシパターンの詳細な説明
  • JavaScript デザインパターン サブスクライバーパターン

<<:  Linux のタイムドログ削除を実装する簡単な方法

>>:  MySQL 接続失敗の一般的な障害と原因

推薦する

JavaScriptオフセットは、ウィンドウ内でのマウス座標の取得とモジュールのドラッグを実装します。

オフセットOffset はオフセットです。関連プロパティの offset シリーズを使用すると、次の...

Dockerで同じIDを持つ2つのイメージを削除する

今日 Docker コンテナを作成したとき、誤ってイメージの名前を間違って入力しました。その結果、コ...

Ansibleを使用してディレクトリ内のすべてのコンテンツを削除する方法

Ansible を使用する学生は、以下に示すように、Ansible が特定のフォルダーまたはファイル...

MySQL での SQL モードの表示と設定の詳細な説明

MySQL での SQL モードの表示と設定MySQL はさまざまなモードで実行でき、さまざまなシナ...

PhpStormがVirtualBoxに接続できない問題を解決する

問題の説明: phpstorm の SFTP ホストを 192.168.122.1 に設定すると、接...

JavaScript のプロトタイプとプロトタイプチェーンの詳細な説明

目次プロトタイプチェーン図プロトタイピングに必須の知識プロトタイププロパティ(プロトタイプを表示) ...

WEBAPP開発スキルのまとめ(モバイルWebサイト開発の注意点)

1. レスポンシブな Web を開発するには、ページを画面サイズに適応させる必要があります。前の記...

VMware ESXi 6.0 および仮想マシンのインストール チュートリアルの展開 (画像とテキスト)

社内には以前からアイドル状態だった、構成の整ったサーバーがあったので、EXSI 6.0 を使って複数...

MySQL 8.0.23 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)

この記事では、MySQL 8.0.23のインストールと設定方法を参考までに紹介します。具体的な内容は...

Hadoop におけるネームノードとセカンダリネームノードの動作メカニズムの説明

1) プロセス 2) FSImageと編集NodeNode は HDFS の頭脳です。ファイルシステ...

トランザクション分離レベルのMySQLケース分析

目次1. 理論シリアル化可能繰り返し読み取りコミットされた読み取りコミットされていない読み取り2. ...

Vue で円形プログレスバーを実装する例

データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...

Vue3.0はチェックボックスコンポーネントのカプセル化を実装します

この記事では、チェックボックスコンポーネントのカプセル化を実装するためのvue3.0の具体的なコード...

JavaScript継承のさまざまな方法とメリット・デメリットを詳しく解説

目次1. プロトタイプチェーン継承2. コンストラクタの借用(古典的な継承) 3. 組み合わせ継承4...

Vue3における7種類のコンポーネント通信の詳細

目次1. Vue3コンポーネント通信方式2. Vue3通信の使い方2.1 小道具2.2 $エミット2...