摘要:代理模式原文地址更多設(shè)計(jì)模式系列教程更多免費(fèi)教程博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。代理模式優(yōu)缺點(diǎn)代理模式有高度解耦對(duì)象保護(hù)易修改等優(yōu)點(diǎn)。
代理模式·原文地址
更多《設(shè)計(jì)模式系列教程》
更多免費(fèi)教程
博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)現(xiàn)方式,但此小冊(cè)只記錄最直截了當(dāng)?shù)膶?shí)現(xiàn)方式 :)0. 項(xiàng)目地址
本節(jié)課代碼
《每天一個(gè)設(shè)計(jì)模式》地址
1. 什么是代理模式?代理模式的定義:為一個(gè)對(duì)象提供一種代理以方便對(duì)它的訪問(wèn)。
代理模式可以解決避免對(duì)一些對(duì)象的直接訪問(wèn),以此為基礎(chǔ),常見(jiàn)的有保護(hù)代理和虛擬代理。保護(hù)代理可以在代理中直接拒絕對(duì)對(duì)象的訪問(wèn);虛擬代理可以延遲訪問(wèn)到真正需要的時(shí)候,以節(jié)省程序開(kāi)銷。
2. 代理模式優(yōu)缺點(diǎn)代理模式有高度解耦、對(duì)象保護(hù)、易修改等優(yōu)點(diǎn)。
同樣地,因?yàn)槭峭ㄟ^(guò)“代理”訪問(wèn)對(duì)象,因此開(kāi)銷會(huì)更大,時(shí)間也會(huì)更慢。
3. 代碼實(shí)現(xiàn) 3.1 python3 實(shí)現(xiàn)class Image: def __init__(self, filename): self.filename = filename def load_img(self): print("finish load " + self.filename) def display(self): print("display " + self.filename) # 借助繼承來(lái)實(shí)現(xiàn)代理模式 class ImageProxy(Image): def __init__(self, filename): super().__init__(filename) self.loaded = False def load_img(self): if self.loaded == False: super().load_img() self.loaded = True def display(self): return super().display() if __name__ == "__main__": proxyImg = ImageProxy("./js/image.png") # 只加載一次,其它均被代理攔截 # 達(dá)到節(jié)省資源的目的 for i in range(0,10): proxyImg.load_img() proxyImg.display()3.2 javascript 實(shí)現(xiàn)
main.js :
// main.js const myImg = { setSrc(imgNode, src) { imgNode.src = src; } }; // 利用代理模式實(shí)現(xiàn)圖片懶加載 const proxyImg = { setSrc(imgNode, src) { myImg.setSrc(imgNode, "./image.png"); // NO1. 加載占位圖片并且將圖片放入元素 let img = new Image(); img.onload = () => { myImg.setSrc(imgNode, src); // NO3. 完成加載后, 更新 元素中的圖片 }; img.src = src; // NO2. 加載真正需要的圖片 } }; let imgNode = document.createElement("img"), imgSrc = "https://upload-images.jianshu.io/upload_images/5486602-5cab95ba00b272bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp"; document.body.appendChild(imgNode); proxyImg.setSrc(imgNode, imgSrc);
main.html :
4. 參考每天一個(gè)設(shè)計(jì)模式 · 代理模式
代理模式
《JavaScript 設(shè)計(jì)模式和開(kāi)發(fā)實(shí)踐》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99415.html
摘要:代理模式原文地址更多設(shè)計(jì)模式系列教程更多免費(fèi)教程博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。代理模式優(yōu)缺點(diǎn)代理模式有高度解耦對(duì)象保護(hù)易修改等優(yōu)點(diǎn)。 代理模式·原文地址 更多《設(shè)計(jì)模式系列教程》 更多免費(fèi)教程 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)...
摘要:受知乎文章和設(shè)計(jì)模式之禪的啟發(fā),我也來(lái)搞一篇腦洞小開(kāi)的文章由標(biāo)題可知,這篇文章是寫給我女朋友看的。于是這就讓經(jīng)紀(jì)人對(duì)粉絲說(shuō)只有萬(wàn),我才會(huì)寫代碼。 前言 只有光頭才能變強(qiáng) 回顧前面: ThreadLocal就是這么簡(jiǎn)單 多線程三分鐘就可以入個(gè)門了! 多線程基礎(chǔ)必要知識(shí)點(diǎn)!看了學(xué)習(xí)多線程事半功倍 Java鎖機(jī)制了解一下 AQS簡(jiǎn)簡(jiǎn)單單過(guò)一遍 Lock鎖子類了解一下 線程池你真不來(lái)了解一下...
摘要:虛擬代理和函數(shù)節(jié)流的思想是一樣的,將用戶對(duì)性能的的傷害降低到最低。虛擬代理上面的保護(hù)代理闡述了怎樣去拒絕請(qǐng)求,而虛擬代理的原則是收集請(qǐng)求來(lái)者不拒他的出發(fā)點(diǎn)和保護(hù)代理的是一樣的,都是為了節(jié)省請(qǐng)求的開(kāi)支。 Whats the proxy pattern? 代理模式其實(shí)就是將違反單一性原則的類給抽離出來(lái),盡量滿足開(kāi)放和封閉的原則。 相當(dāng)于一個(gè)類的行為只是一種,但是你可以給這個(gè)類添加額外的行為...
摘要:適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己。 1、常用設(shè)計(jì)模式 單例模式:懶漢式、餓漢式、雙重校驗(yàn)鎖、靜態(tài)加載,內(nèi)部類加載、枚舉類加載。保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。 代理模式:動(dòng)態(tài)代理和靜態(tài)代理,什么時(shí)候使用...
摘要:我們今天也來(lái)做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
閱讀 3027·2023-04-25 20:22
閱讀 3345·2019-08-30 11:14
閱讀 2597·2019-08-29 13:03
閱讀 3187·2019-08-26 13:47
閱讀 3228·2019-08-26 10:22
閱讀 1274·2019-08-23 18:26
閱讀 620·2019-08-23 17:16
閱讀 1917·2019-08-23 17:01