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 接続失敗の一般的な障害と原因

推薦する

Win7 64 ビット版に MySQL 5.7 をダウンロードしてインストールする際によくある問題の概要

1. 公式ウェブサイトからMySQLをダウンロードします。 これが私たちが探しているものです、win...

js を使用して数字推測ゲームを実装する

先週、先生が私に数字当てゲームをするちょっとした宿題を出しました。とても面白いと思ったので、適当に書...

CentOS 7.9 の zabbix5.0.14 のインストールと設定プロセス

目次1. 基本的な環境設定2. データベースをインストールする3. zabbix関連コンポーネントを...

VUE 応答性原理の詳細な説明

目次1. 応答原理の基盤2. コアオブジェクト: Dep と Watcher 3. 依存関係を収集し...

コードレイン効果を実現するjQueryプラグイン

この記事では、コードレイン特殊効果を実現するためのjQueryプラグインの具体的なコードを参考までに...

LinuxカーネルとSVNバージョン間の競合の解決策

現象システムは Linux システムカーネルを正常にコンパイルできましたが、SVN をインストールし...

html オプション 無効 選択 選択 無効 オプションの例

コードをコピーコードは次のとおりです。 <選択> <オプション値="&q...

MySQL無料インストールバージョンの設定チュートリアル

この記事では、参考までにMySQLの無料インストール構成チュートリアルを紹介します。具体的な内容は次...

React+Amapは緯度と経度をリアルタイムで取得し、住所を特定します

目次1. マップを初期化する2. マップポイント3. 位置決めを有効にする4. マップの変更を監視す...

MySQLカバーインデックスの利点

一般的な提案は、WHERE 条件のインデックスを作成することですが、これは実際には一方的です。インデ...

JavaScript 配列の詳細な概要

目次1. 配列誘導1. 文字列を配列に分割する2. コレクションとマップを新しい配列に変換する3. ...

CentOS 6.5 に MySQL 5.6 をインストールするチュートリアル

1. Linuxに対応するRPMパッケージをダウンロードする5.6 より前のバージョンhttp://...

mysql8.0.19 でパスワードを忘れた場合の完璧な解決策

おすすめの読み物: MySQL 8.0.19 は、間違ったパスワードを 3 回入力するとアカウント ...

MySQLインデックスの作成について知っておくべきこと

目次序文: 1. インデックスメソッドを作成する2. インデックスを作成するために必要な権限序文: ...

MySQLの場合の使用例分析

まず、データベース テーブルを作成します。 テーブル `t_demo` を作成します ( `id` ...