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

推薦する

Vueはechart円グラフの凡例のパーセンテージを表示するメソッドを実装します

この記事では主に、echart を使用してパーセンテージを表示する Vue の円グラフデータ部分を紹...

WeChatアプレットの下部にあるタブバーがコンテンツをブロックする問題に対処する簡単な方法

WeChatアプレットでタブバーを設定すると、重要なコンテンツがブロックされ、iPhoneXなどの異...

MySQL 操作: JSON データ型の操作

前回の記事では、MySQL データ保存手順パラメータの詳細な例を紹介しました。今日は、JSON デー...

MySQL のグループ分けの例

mysql のような php switch case ステートメント。 xxフィールドを選択、ケース...

Linux での GDB 入門チュートリアル

序文gdb は Linux で非常に便利なデバッグ ツールです。コマンドライン モードのデバッグ ツ...

Flex レイアウトで適応型ページを作成する (構文と例)

Flex レイアウトの紹介英語の Flex はフレキシブル ボックス、つまり伸縮性のあるボックスを...

シンプルな加算計算機の JavaScript 実装

この記事では、参考までに、加算計算機を実装するためのJavaScriptの具体的なコードを紹介します...

要素の幅(高さ)の適応を実現するCSSおよびCSS3の柔軟なボックスモデル

1. CSSは左の固定幅と右の適応幅を実現します1. ポジショニング <!DOCTYPE ht...

MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明

序文多くの管理・オフィスシステムでは、ツリー構造がいたるところで見られます。たとえば、「部門」や「機...

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

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

HTML におけるブロックコメントの使用に関する詳細な紹介

HTML の一般的なコメント: <!--XXXXXXXX--> (XXXXXXXX はコ...

MYSQL の COLLATE とは何ですか?

序文MySQL で show create table <tablename> コマンド...

ホワイトボードを踏まないようにするゲームを実装するための HTML+CSS+JS

目次背景1. 思考分析2. ページ構成2.1 HTML レイヤー2.2 CSS レイヤー2.3 JS...

JavaScript の高度なクロージャの説明

目次1. 閉鎖の概念追加の知識ポイント: 2. 閉鎖の役割: 3. 閉鎖例3.1 liをクリックする...