輕鬆掌握JavaScript代理模式_javascript技巧

來源:互聯網
上載者:User

在物件導向設計中,有一個單一職責原則,指就一個類(對象、函數)而言,應該僅有一個引起它變化的原因。如果一個對象承擔了過多的職責,就意味著它將變得巨大,引起它變化的原因就多,它把這些職責耦合到了一起,這種耦合會導致程式難於維護和重構。 

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

通常代理和本體的介面應該保持一致性,這樣當不需要代理的時候,使用者可直接存取本體。 

當我們不方便直接存取一個對象時,就可以考慮給該對象招一個代理。 

代理可用於:圖片預先載入、合并HTTP請求(代理收集一定時間內的所有HTTP請求,然後一次性發給伺服器)、惰性載入(通過代理處理和收集一些基本操作,然後僅在真正需要本體的時候才載入本體)、緩衝代理(緩衝請求結果、計算結果)等

例子1:圖片預先載入

 var myImage = (function(){ var imgNode = document.createElement('img'); document.body.appendChild(imgNode); return {  setSrc:function(src){   imgNode.src = src;  } }})();//代理函數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');

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.