一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - JavaScript設計模式學習之代理模式

JavaScript設計模式學習之代理模式

2022-03-10 16:34有夢想的咸魚前端 js教程

這篇文章主要介紹了JavaScript設計模式學習之代理模式,對設計模式感興趣的同學,可以參考下

概述

代理模式屬于設計模式中結構型的設計模式;

定義:

顧名思義就是為一個對象提供一個代用品或占位符,以便控制對它的訪問!

白話解釋:

很多明星都是有經紀人的,如果要聯系明顯進行商演或者開演唱會之類的商業活動通過是需要先跟經紀人取得聯系的,跟經紀人談好了合作事宜之后經紀人再轉達給某明星,然后某明星才會去參加活動;同樣租房也是一個同樣的道理,我們不管是租房還是買房,第一反應肯定是找鏈家這類的平臺,因為我們只需要跟鏈家進行溝通,而鏈家去跟房東溝通,省去了我們直接和房東溝通的步驟;因為鏈家就是一個代理模式,它代理了這個房東的房源;

實現方法

舉個例子:

你作為一個追星狂魔,是某明星的忠誠粉絲;剛好某明星近期要過生日了,你準備送上禮物代表你的心意,正常的流程:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
var Fans = {
    flower(){
        star.reception("花");
    }
}
 
var star = {
    reception:function(gift){
        console.log("收到粉絲的:"+gift);
    }
}
 
Fans.flower();   //收到粉絲的:花

你選擇了買花寄給她,希望她能感受到你的心意;但是往往理想很豐滿,現實很骨感!別忘了還有經紀人,因為簽收你的禮物的往往不是明星本人而是經紀人:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var Fans = {
    flower(){
        Agent.reception("花");
    }
}
 
var Agent = {
    reception:function(gift){
        console.log("粉絲送的:"+gift);   //粉絲送的:花
        star.reception("花");
    }
}
var star = {
    reception:function(gift){
        console.log("收到粉絲的:"+gift);
    }
}
 
Fans.flower();    //收到粉絲的:花

這里的經紀人就是一個簡單的代理了,粉絲需要先把禮物給經紀人,經紀人再轉給明星本人;

保護代理

明星滿心歡喜的看到粉絲寄過來的包裹的時候,拆開一看,原來是花!明星很不屑,所以告訴經紀人,以后凡是給我寄花的,通通不要給我了,你自己看著處理:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var Fans = {
    flower(){
        Agent.reception("花");
    }
}
 
var Agent = {
    reception:function(gift){
        console.log("粉絲送的:"+gift);  //粉絲送的:花
        if(gift != "花"){
            star.reception("花");
        }
      
    }
}
var star = {
    reception:function(gift){
        console.log("收到粉絲的:"+gift);
    }
}
 
Fans.flower();

上面的程序中明星根本就沒有收到粉絲寄過來的花,因為在經紀人那里就已經攔截處理了;通過經紀人來過濾掉一部分禮物,這種模式叫做保護代理;

虛擬代理

粉絲送花明星收不到,那粉絲就轉換一下思路,送點錢自己去買想要的東西吧!于是找到經紀人,給了經紀人一百萬現金,讓經紀人轉達給明星本人;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function Money(){
    this.total = "一百萬現金"
   return this.total;
}
var Fans = {
    flower(){
        Agent.reception();
    }
}
 
var Agent = {
    reception:function(){
        // console.log("粉絲送的:"+gift);
        let money = new Money();
        star.reception(money.total);
      
    }
}
var star = {
    reception:function(gift){
        console.log("收到粉絲的:"+gift);  //收到粉絲的:一百萬現金
    }
}
 
Fans.flower();

明星收到了一百萬就很開心;這一百萬因為不是花,沒有被經紀人攔截過濾;所以明星本人就直接收到了,這種模式我們稱為虛擬代理模式;

虛擬代理實現圖片懶加載

沒用代理的時候我們的代碼是這樣的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 創建一個本體對象
var myImage = (function(){
  // 創建標簽
  var imgNode = document.createElement( 'img' );
  // 添加到頁面
  document.body.appendChild( imgNode );
  return {
    // 設置圖片的src
    setSrc: function( src ){
      // 更改src
      imgNode.src = src;
    }
  }
})();
 
myImage.setSrc( 'http:// image.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );

虛擬代理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 創建一個本體對象
var myImage = (function(){
  // 創建標簽
  var imgNode = document.createElement( 'img' );
  // 添加到頁面
  document.body.appendChild( imgNode );
  return {
    // 設置圖片的src
    setSrc: function( src ){
      // 更改src
      imgNode.src = src;
    }
  }
})();
 
// 創建代理對象
var proxyImage = (function(){
  // 創建一個新的img標簽
  var img = new Image;
  // img 加載完成事件
  img.onload = function(){
    // 調用 myImage 替換src方法
    myImage.setSrc( this.src );
  }
  return {
    // 代理設置地址
    setSrc: function( src ){
      // 預加載 loading
      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設計模式的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/dengyao-blogs/p/11713185.html

延伸 · 閱讀

精彩推薦
  • js教程了不起的11個JavaScript代碼重構最佳實踐小結

    了不起的11個JavaScript代碼重構最佳實踐小結

    這篇文章主要介紹了了不起的11個JavaScript代碼重構最佳實踐小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    pikapi3892021-12-29
  • js教程用js控制電燈開關

    用js控制電燈開關

    這篇文章主要為大家詳細介紹了用js控制電燈開關,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    小蘇(o﹃o )4012022-03-08
  • js教程javascript實現隨機抽獎功能

    javascript實現隨機抽獎功能

    這篇文章主要為大家詳細介紹了javascript實現隨機抽獎功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    彴兗7152021-12-23
  • js教程JavaScript實現4位隨機驗證碼的生成

    JavaScript實現4位隨機驗證碼的生成

    這篇文章主要為大家詳細介紹了JavaScript實現4位隨機驗證碼的生成,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    weixin_4202683110542022-01-10
  • js教程JavaScript事件概念詳解(區分靜態注冊和動態注冊)

    JavaScript事件概念詳解(區分靜態注冊和動態注冊)

    這篇文章主要介紹了JavaScript事件(區分靜態注冊和動態注冊)的相關資料,幫助大家更好的理解和學習使用JavaScript,感興趣的朋友可以了解下...

    皮卡丘和羊寶貝7042022-01-17
  • js教程JavaScript實現鼠標經過表格行給出顏色標識

    JavaScript實現鼠標經過表格行給出顏色標識

    這篇文章主要為大家詳細介紹了JavaScript實現鼠標經過表格行給出顏色標識,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參...

    KathyLJQ8702022-02-27
  • js教程確保JavaScript 安全的五大做法

    確保JavaScript 安全的五大做法

    如果你運行交互式網站或應用程序,JavaScript 安全性是重中之重。 從程序錯誤和不安全的用戶輸入到惡意攻擊,有很多事情可能會出錯。...

    粵嵌教育8832022-01-11
  • js教程小程序錄音功能實現

    小程序錄音功能實現

    這篇文章主要介紹了小程序錄音功能實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編...

    愛喝華農學士的程序媛9042022-02-13
主站蜘蛛池模板: 免费视频一级片 | 动漫a级片 | 午夜爽喷水无码成人18禁三级 | 精品成人一区二区 | 手机看片国产免费久久网 | 无码AV熟妇素人内射V在线 | 国产成人免费片在线视频观看 | 女人张开腿让男人做爽爽 | 国产综合欧美日韩视频一区 | 波多野结衣在线中文 | 亚洲九九爱 | 女bbbbxxxx视频 | 媳妇和公公小说 | 天天操天天干天天做 | 欧美日韩国产亚洲一区二区 | 91av最新地址| 草莓视频看污 | 大陆国产精品视频 | 日本免费高清在线 | 日本久本草精品 | 欧美综合另类 | 青草国产福利视频免费观看 | 嗯啊视频在线观看 | 91精品国产高清久久久久久io | 二次元美女扒开内裤露尿口 | 波多在线 | 高h辣h双处全是肉军婚 | 婚前试爱全集免费观看 | porno18hd老师| 亚洲国产第一区二区香蕉日日 | 2020最新版的ab片 | 大妹子最新视频在线观看 | 日本网| 91免费永久在线地址 | 国产在线视频福利 | 亚洲视频在线观看免费 | 日b视频免费 | 亚洲国产中文字幕在线视频综合 | 嫩草影院久久99 | 国产欧美精品一区二区三区四区 | 亚洲 综合 欧美在线视频 |