欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

輕松掌握J(rèn)avaScript代理模式

 更新時間:2016年08月26日 08:45:07   作者:蘇福  
這篇文章主要幫助大家輕松掌握J(rèn)avaScript代理模式,什么是代理模式?代理的用途,感興趣的小伙伴們可以參考一下

在面向?qū)ο笤O(shè)計中,有一個單一職責(zé)原則,指就一個類(對象、函數(shù))而言,應(yīng)該僅有一個引起它變化的原因。如果一個對象承擔(dān)了過多的職責(zé),就意味著它將變得巨大,引起它變化的原因就多,它把這些職責(zé)耦合到了一起,這種耦合會導(dǎo)致程序難于維護(hù)和重構(gòu)。 

這時候,我們可以把該對象(本體)的其中一部分職責(zé)分離出來給一些第三方對象去做,本體只管自己的一些核心職責(zé),這些第三方對象就稱作代理。代理對象可以作為對象(也叫“真正的主體”)的保護(hù)者,讓真正的主體對象做盡量少的工作。在代理設(shè)計模式中,一個對象充當(dāng)了另一個對象的接口的角色。 

通常代理和本體的接口應(yīng)該保持一致性,這樣當(dāng)不需要代理的時候,用戶可直接訪問本體。 

當(dāng)我們不方便直接訪問一個對象時,就可以考慮給該對象招一個代理。 

代理可用于:圖片預(yù)加載、合并HTTP請求(代理收集一定時間內(nèi)的所有HTTP請求,然后一次性發(fā)給服務(wù)器)、惰性加載(通過代理處理和收集一些基本操作,然后僅在真正需要本體的時候才加載本體)、緩存代理(緩存請求結(jié)果、計算結(jié)果)等

例子1:圖片預(yù)加載

 var myImage = (function(){
 var imgNode = document.createElement('img');
 document.body.appendChild(imgNode);
 return {
  setSrc:function(src){
   imgNode.src = src;
  }
 }
})();
//代理函數(shù)
var proxyImage = (function(){
 var img = new Image;
 img.onload = function(){
  myImage.setSrc(this.src);
 }
 return{
  setSrc:function(src){
   myImage.setSrc('loading.gif');
   img.src = src;
  }
 }
})();

proxyImage.setSrc('show.jpg');

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論