成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Javascript設(shè)計(jì)模式(五)代理模式

Riddler / 1485人閱讀

摘要:使用者無(wú)權(quán)訪問(wèn)目標(biāo)對(duì)象,通過(guò)代理做授權(quán)和控制代理模式是一種非常有意義的模式。如果一個(gè)對(duì)象承擔(dān)了多項(xiàng)職責(zé),那么引起變化的原因可能就有多個(gè)。

使用者無(wú)權(quán)訪問(wèn)目標(biāo)對(duì)象,通過(guò)代理做授權(quán)和控制

代理模式是一種非常有意義的模式。在生活中也能找到代理模式的情景,比如,明星都有經(jīng)紀(jì)人作為代理,如果想請(qǐng)明星來(lái)辦一場(chǎng)商業(yè)演出,只能聯(lián)系他的經(jīng)紀(jì)人,經(jīng)紀(jì)人會(huì)把商業(yè)演出的細(xì)節(jié)和報(bào)酬都談好之后,再將合同交給明星簽。

代理實(shí)現(xiàn)圖片懶加載

在前端開發(fā)中,圖片懶加載是一項(xiàng)非常實(shí)用的技術(shù)。為了性能優(yōu)化,我們常常在圖片加載之前用一張圖片占位,等圖片加載完成之后再將圖片填充到src上,這種場(chǎng)景就很容易實(shí)用代理模式。

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(img.src)
    }
    return {
        setSrc: function(src) {
            myImage.setSrc("./loading.gif")
            img.src = src
        }
    }
})()

proxyImage.setSrc("https://user-gold-cdn.xitu.io/2016/11/29/805fd2776ae656464329c04f63181266?imageView2/1/w/180/h/180/q/85/format/webp/interlace/1")

通過(guò)proxyImage間接訪問(wèn)MyImage。proxyImage控制來(lái)客戶對(duì)MyImage的訪問(wèn),并且在此過(guò)程中加入一些額外的操作,比如在圖片加載前,先將src設(shè)置為本地的loading圖。

緩存代理

緩存代理可以為一些開銷較大的運(yùn)算結(jié)果暫時(shí)的存儲(chǔ),在下次運(yùn)算時(shí),如果傳遞的值一致,則可以直接返回前面存儲(chǔ)的結(jié)果。

// 創(chuàng)建一個(gè)乘積函數(shù)
var mult = function() {
    console.log("開始計(jì)算乘積")
    var a = 1
    for(var i = 0, l = arguments.length; i

當(dāng)?shù)诙握{(diào)用proxyMult的時(shí)候,本體mult并沒(méi)有直接計(jì)算,proxyMult直接返回之前的結(jié)果

引入代理的意義

為了說(shuō)明代理的意義,下面引入一個(gè)面向?qū)ο蟮脑O(shè)計(jì)原則:單一職責(zé)原則

一個(gè)類(對(duì)象或者函數(shù))而言,應(yīng)該只能有一個(gè)引起它變化的原因。如果一個(gè)對(duì)象承擔(dān)了多項(xiàng)職責(zé),那么引起變化的原因可能就有多個(gè)。

實(shí)際上增加懶加載圖片只是一個(gè)景上添花的行為??v觀整個(gè)程序,我們并沒(méi)有改變myImage的接口,但是通過(guò)代理,給接口添加了新的行為,如果某天不需要了,也不用修改本體。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108615.html

相關(guān)文章

  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(): 代理模式和Proxy

    摘要:此時(shí),鏈家起到的作用就是代理的作用。驗(yàn)證代理構(gòu)造函數(shù)第二個(gè)參數(shù)中的方法,可以很方便的驗(yàn)證向一個(gè)對(duì)象的傳值。 1 什么是代理模式 showImg(https://segmentfault.com/img/remote/1460000015800706?w=1262&h=464); 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。在某些情況下,一個(gè)對(duì)象不適合或者不能直接引用另一個(gè)對(duì)象,而代理...

    verano 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式系列:適配器模式

    摘要:什么是適配器模式所謂適配器模式就是用一個(gè)新的接口對(duì)現(xiàn)有的接口進(jìn)行包裝,處理類與的不匹配。對(duì)象適配器可以適配它的父對(duì)象接口方法或?qū)傩?。裝飾者模式增強(qiáng)了對(duì)象的功能而同時(shí)又不改變它的接口,因此它對(duì)程序的透明度比適配器要好。 什么是適配器模式 所謂 適配器模式 就是用一個(gè)新的接口對(duì)現(xiàn)有的接口進(jìn)行包裝,處理類與API的不匹配。使用這種模式的對(duì)象又叫作包裝器。比如我們有一個(gè)接口: function...

    banana_pi 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式之()——代理模式

    摘要:什么是代理模式什么是代理模式為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。另外一種方式是動(dòng)態(tài)代理。代理模式應(yīng)用場(chǎng)景代理模式應(yīng)用場(chǎng)景業(yè)務(wù)系統(tǒng)的非功能性需求開發(fā)這是最常用的一個(gè)場(chǎng)景。1、什么是代理模式 Provide a surrogate or placeholder for another object to control access to it. Proxy Pat...

    李文鵬 評(píng)論0 收藏0
  • Nginx 配置 https相關(guān)問(wèn)題

    摘要:證書生成完畢后,可以在中找到四配置當(dāng)用訪問(wèn)時(shí)重定向至重啟服務(wù),即可使用訪問(wèn)該網(wǎng)站五其他自動(dòng)更新證書證書只有天的有效期,所以在證書到期之前,我們需要重新獲取這些證書,可以使用這個(gè)命令。 一、Nginx基礎(chǔ) 1.概念: Nginx是一款輕量級(jí)的Web服務(wù)器、反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。 正向代理服務(wù)器:一般作用在客戶端,位于客戶端和服務(wù)器之間,客戶端發(fā)送請(qǐng)...

    nifhlheimr 評(píng)論0 收藏0
  • JavaScript MVC 學(xué)習(xí)筆記()事件操作的拓展

    摘要:事件類型布爾值,表示事件是否通過(guò)以冒泡形式觸發(fā)。表示鍵盤事件的屬性布爾值,表示當(dāng)前按下的鍵是否表示一個(gè)字符。表示當(dāng)前按鍵的值僅對(duì)事件有效。,事件發(fā)生時(shí)相對(duì)于屏幕的坐標(biāo)。 事件對(duì)象 event 對(duì)象還包含很多有用的屬性。W3C 范中包含的大部分屬性都列在下面,更多信息參照完整的標(biāo)準(zhǔn)規(guī)范。 事件類型: bubbles :布爾值,表示事件是否通過(guò)DOM 以冒泡形式觸發(fā)。 事件發(fā)生時(shí)...

    Anshiii 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<