代理模式是一種對程序?qū)ο筮M(jìn)行控制性訪問的一類解決方案。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)名山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
引入代理模式,其實(shí)是為了實(shí)現(xiàn)單一職責(zé)的面向?qū)ο笤O(shè)計(jì)原則。
單一職責(zé)其實(shí)就是指在一個(gè)類中(js中通常指對象和函數(shù)等),應(yīng)僅有一個(gè)引起它變化的原因。這樣會(huì)幫助程序設(shè)計(jì)具有良好的健壯和高內(nèi)聚特性,從而當(dāng)變化發(fā)生時(shí),程序設(shè)計(jì)會(huì)盡量少的受到意外破壞。
代理模式有多種方法,保護(hù)代理、遠(yuǎn)程代理、虛擬代理、緩存代理等。
但在javascript中,代理模式最常用到的兩種方法是虛擬代理和緩存代理。
虛擬代理
在理解虛擬代理時(shí),可以將其想象為一個(gè)經(jīng)紀(jì)人,客戶程序需要通過這個(gè)虛擬代理(經(jīng)紀(jì)人)來調(diào)用本體對象的方法。
虛擬代理示例demo1: 圖片loading預(yù)加載
//通過虛擬代理實(shí)現(xiàn)圖片預(yù)加載 //代理模式進(jìn)行圖片預(yù)加載的實(shí)現(xiàn)思路是: 通過代理對象獲取實(shí)際顯示圖片地址并進(jìn)行加載,同時(shí)先讓本體對象顯示預(yù)加載圖片,待代理對象將實(shí)際圖片地址加載完畢后傳遞給本體對象進(jìn)行顯示即可。 //本體對象 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、代理對象新建一個(gè)img對象 img.onload = function(){ //4、代理對象img加載真實(shí)圖片src完成后將src傳遞給本體對象顯示 myImage.setSrc(this.src) } return { setProxySrc: function(src){ myImage.setSrc('../images/loding.gif') //2、代理對象控制本體對象使用加載圖片src img.src = src //3、代理對象的img對象獲取將要傳遞給本體對象的真實(shí)圖片src } } })() //通過代理對象來對本體對象進(jìn)行訪問 proxyImage.setProxySrc('https://p1.ssl.qhimgs1.com/t0153297036f4471d81.jpg')
虛擬代理示例demo2:合并HTTP請求,減少網(wǎng)絡(luò)請求資源消耗
代理模式 虛擬代理合并HTTP請求 1 2 3 4 5 6 7 8 9
緩存代理
緩存代理可以為一些開銷大的運(yùn)算結(jié)果提供暫時(shí)存儲(chǔ),在下次運(yùn)算時(shí),如果傳遞進(jìn)來的參數(shù)和之前的一致,則可以直接返回前面存儲(chǔ)的結(jié)果
緩存代理示例demo: 計(jì)算乘積
代理模式-緩存代理 *
在編寫業(yè)務(wù)代碼時(shí),并不需要一開始就考慮是否使用代理模式,只要當(dāng)發(fā)現(xiàn)使用代理模式更方便時(shí),再編寫代理對象即可。
以上所述是小編給大家介紹的javascript設(shè)計(jì)模式三:代理模式詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!