国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解javascript設計模式三:代理模式

2024-05-06 15:41:24
字體:
來源:轉載
供稿:網友

代理模式是一種對程序對象進行控制性訪問的一類解決方案。

引入代理模式,其實是為了實現單一職責的面向對象設計原則。

單一職責其實就是指在一個類中(js中通常指對象和函數等),應僅有一個引起它變化的原因。這樣會幫助程序設計具有良好的健壯和高內聚特性,從而當變化發生時,程序設計會盡量少的受到意外破壞。

代理模式有多種方法,保護代理、遠程代理、虛擬代理、緩存代理等。

但在javascript中,代理模式最常用到的兩種方法是虛擬代理和緩存代理。

虛擬代理

在理解虛擬代理時,可以將其想象為一個經紀人,客戶程序需要通過這個虛擬代理(經紀人)來調用本體對象的方法。

虛擬代理示例demo1: 圖片loading預加載

//通過虛擬代理實現圖片預加載//代理模式進行圖片預加載的實現思路是: 通過代理對象獲取實際顯示圖片地址并進行加載,同時先讓本體對象顯示預加載圖片,待代理對象將實際圖片地址加載完畢后傳遞給本體對象進行顯示即可。//本體對象var myImage = (function(){  var imgNode = new Image()  document.body.appendChild(imgNode)  return {    setSrc: function(src){      imgNode.src = src    }  }})()//代理對象var proxyImage = (function(){  var img = new Image();     //1、代理對象新建一個img對象  img.onload = function(){    //4、代理對象img加載真實圖片src完成后將src傳遞給本體對象顯示    myImage.setSrc(this.src)  }  return {    setProxySrc: function(src){      myImage.setSrc('../images/loding.gif') //2、代理對象控制本體對象使用加載圖片src      img.src = src          //3、代理對象的img對象獲取將要傳遞給本體對象的真實圖片src    }  }})()//通過代理對象來對本體對象進行訪問proxyImage.setProxySrc('https://p1.ssl.qhimgs1.com/t0153297036f4471d81.jpg')

虛擬代理示例demo2:合并HTTP請求,減少網絡請求資源消耗

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta http-equiv="X-UA-Compatible" content="ie=edge">  <title>代理模式 虛擬代理合并HTTP請求</title></head><body>  <div>    <input type="checkbox" id="1" />1    <input type="checkbox" id="2" />2    <input type="checkbox" id="3" />3    <input type="checkbox" id="4" />4    <input type="checkbox" id="5" />5    <input type="checkbox" id="6" />6    <input type="checkbox" id="7" />7    <input type="checkbox" id="8" />8    <input type="checkbox" id="9" />9  </div>  </body><script>  //使用  //本體對象  var synchornurFile = function(id){    console.log('開始同步:' + id);  }  var proxySynchornurFile = (function(){    var cache = [],   //集合一段時間內需要同步的id      timer;   //定時器    return function(id){      cache.push(id)      if(timer){   //保證不會覆蓋已經啟動的定時器        return      }      timer = setTimeout(function(){        synchornurFile(cache.join(','))        clearTimeout(timer)        timer = null        cache.length = 0      }, 2000)    }  })()  var check = document.getElementsByTagName('input')  for(var i=0; i<check.length; i++){    check[i].onclick = function(){      if(this.checked === true){        proxySynchornurFile(this.id)      }    }  }</script></html>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 盐城市| 灌阳县| 高碑店市| 彭州市| 清涧县| 绥宁县| 涟水县| 巧家县| 娱乐| 江山市| 高台县| 乡宁县| 衢州市| 乌苏市| 酉阳| 汕头市| 正阳县| 报价| 兰西县| 探索| 芜湖市| 四川省| 塔城市| 龙胜| 石台县| 白朗县| 开远市| 晴隆县| 车致| 武强县| 玉树县| 邮箱| 咸丰县| 怀宁县| 苗栗县| 丰城市| 连州市| 德阳市| 三亚市| 巫溪县| 东阿县|