摘要:使用者無(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
摘要:此時(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ì)象,而代理...
摘要:什么是適配器模式所謂適配器模式就是用一個(gè)新的接口對(duì)現(xiàn)有的接口進(jìn)行包裝,處理類與的不匹配。對(duì)象適配器可以適配它的父對(duì)象接口方法或?qū)傩?。裝飾者模式增強(qiáng)了對(duì)象的功能而同時(shí)又不改變它的接口,因此它對(duì)程序的透明度比適配器要好。 什么是適配器模式 所謂 適配器模式 就是用一個(gè)新的接口對(duì)現(xiàn)有的接口進(jìn)行包裝,處理類與API的不匹配。使用這種模式的對(duì)象又叫作包裝器。比如我們有一個(gè)接口: function...
摘要:什么是代理模式什么是代理模式為其他對(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...
摘要:證書生成完畢后,可以在中找到四配置當(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)...
摘要:事件類型布爾值,表示事件是否通過(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í)...
閱讀 2516·2021-11-17 09:33
閱讀 814·2021-11-04 16:13
閱讀 1370·2021-10-14 09:50
閱讀 733·2019-08-30 15:53
閱讀 3710·2019-08-30 14:18
閱讀 3304·2019-08-30 14:14
閱讀 2149·2019-08-30 12:46
閱讀 3222·2019-08-26 14:05