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

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

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
主站蜘蛛池模板: freesex1718处xx| 粉嫩高中生第一次不戴套 | s8sp加密路线和免费路线首页 | 法国贵妇一级伦理hd | 国产香蕉一区二区在线网站 | 特级av毛片免费观看 | 二次元美女扒开内裤露尿口 | 全日爱韩国视频在线观看 | 69看片| 久久精品黄AA片一区二区三区 | 精品国产mmd在线观看 | 久久er国产精品免费观看2 | 6080欧美一区二区三区四区 | 日韩去日本高清在线 | 欧美综合国产精品日韩一 | 国产成人精视频在线观看免费 | 亚洲系列国产精品制服丝袜第 | 高清一级做a爱免费视 | 亚洲 欧美 成人 | 欧美a一级片 | 国产成人免费观看在线视频 | 九九久久国产精品免费热6 九九精品视频一区二区三区 | 香蕉人人超人人超碰超国产 | 免费观看国产视频 | 99精品国产高清自在线看超 | 九九热视频 这里有精品 | 日本护士xxxx视频免费 | 视频一本大道香蕉久在线播放 | 欧美夜夜精品一级爽 | 亚洲欧美日韩另类在线一 | 69罗莉视频在线观看 | 国产123区在线视频观看 | 色中文字幕| 不良小说| 亚洲精品免费视频 | 高贵女王调奴vk | 果冻传媒在线观看的 | 国产真实一区二区三区 | 黑人巨荃大战乌克兰美女 | 成人免费在线视频 | 国产福利视频一区二区微拍 |