摘要:保護(hù)代理和虛擬代理保護(hù)代理當(dāng)有許多需求要向某對(duì)象發(fā)出一些請(qǐng)求時(shí),可以設(shè)置保護(hù)代理,通過一些條件判斷對(duì)請(qǐng)求進(jìn)行過濾。虛擬代理在程序中可以能有一些代價(jià)昂貴的操作。而虛擬代理是最常用的一種代理模式。
代理模式
代理模式是為一個(gè)對(duì)象提供一個(gè)代用品或占位符,以便控制對(duì)它的訪問。
保護(hù)代理和虛擬代理保護(hù)代理:當(dāng)有許多需求要向某對(duì)象發(fā)出一些請(qǐng)求時(shí),可以設(shè)置保護(hù)代理,通過一些條件判斷對(duì)請(qǐng)求進(jìn)行過濾。
虛擬代理:在程序中可以能有一些代價(jià)昂貴的操作。此時(shí)可以設(shè)置虛擬代理去代為執(zhí)行,這里的虛擬代理便會(huì)在適合的時(shí)候(需要用到的時(shí)候)才去執(zhí)行。
保護(hù)代理用于控制不同權(quán)限的對(duì)象對(duì)目標(biāo)對(duì)象的訪問,但在JavaScript并不容易實(shí)現(xiàn)保護(hù)代理,因?yàn)槲覀儫o法判斷誰訪問了某個(gè)對(duì)象。而虛擬代理是最常用的一種代理模式。虛擬代理實(shí)現(xiàn)圖片預(yù)加載
預(yù)加載圖片在Web開發(fā)中十分常用,其通過異步的方式加載圖片,利用一張loading圖片占位。等圖片加載好之后把圖片填充到img節(jié)點(diǎn)中。
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("realImage.jpg")
通過proxyImage間接的訪問了MyImage。proxyImage控制了客戶對(duì)MyImage的訪問,并且在此過程中加入了一些額外的操作,比如在真正的圖片加載好之前,先把img節(jié)點(diǎn)的src設(shè)置為一張loading圖片。代理的意義
面向?qū)ο笤O(shè)計(jì)原則——單一職責(zé)原則。單一職責(zé)原則指的是,就一個(gè)類(通常也包括對(duì)象和函數(shù)等)而言,應(yīng)該僅有一個(gè)引起它變化的原因。如果一個(gè)對(duì)象承擔(dān)了多項(xiàng)職責(zé),就意味著這個(gè)對(duì)象將變得巨大,引起它變化的原因會(huì)有多個(gè)。面向?qū)ο笤O(shè)計(jì)鼓勵(lì)將行為分布到細(xì)粒度的對(duì)象之中,如果一個(gè)對(duì)象承擔(dān)的職責(zé)過多,等于把這些職責(zé)耦合到了一起,這種耦合會(huì)導(dǎo)致脆弱和低內(nèi)聚的設(shè)計(jì),帶變化發(fā)生時(shí),設(shè)計(jì)可能會(huì)遭到意外的破壞。
虛擬代理例子中,代理模式給系統(tǒng)添加了額外的功能,預(yù)加載圖片。而我們實(shí)際需要的只是MyImage的setImage方法。預(yù)加載只是一個(gè)錦上添花的功能。通過代理模式使得這兩個(gè)功能獨(dú)立開來,遵循了開放-封閉原則。
緩存代理緩存代理可以為一些開銷大的運(yùn)算結(jié)果提供暫時(shí)的存儲(chǔ),在下次運(yùn)算時(shí),如果傳遞進(jìn)來的參數(shù)跟之前一致,則可以直接返回前面存儲(chǔ)的運(yùn)算結(jié)果。
乘積運(yùn)算的例子
/*******計(jì)算乘積******/ var mult = function(){ console.log("開始計(jì)算乘積") var a = 1 for (var i = 0,l = arguments.length;i最后 雖然代理模式非常有用,但我們?cè)诰帉憳I(yè)務(wù)代碼的時(shí)候,往往不需要去預(yù)先猜測(cè)是否需要使用代理模式。當(dāng)真正發(fā)現(xiàn)不方便直接訪問某個(gè)對(duì)象的時(shí)候,再編寫代理不遲。代理模式是一種很實(shí)用的設(shè)計(jì)模式,很好的詮釋了面向?qū)ο笾械膯我宦氊?zé)原則和開放-封閉原則。在實(shí)際開發(fā)的時(shí)候往往會(huì)迫于進(jìn)度壓力或者實(shí)現(xiàn)了再說的態(tài)度忽略了一些必要的代碼的可維護(hù)性,我覺得在一些簡(jiǎn)單的地方去試著遵循一些設(shè)計(jì)理念是對(duì)自己代碼能力的提升。當(dāng)然不要為了設(shè)計(jì)而設(shè)計(jì)啦。
Done is better then Perfect
參考《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》—— 曾探
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95345.html
摘要:但實(shí)際中,內(nèi)部迭代器和外部迭代器兩者并無優(yōu)劣。迭代器并不只迭代數(shù)組迭代器模式不僅能迭代數(shù)組,還可以迭代一些類數(shù)組對(duì)象。晚安了,參考設(shè)計(jì)模式與開發(fā)實(shí)踐曾探本文作者本文鏈接迭代器模式設(shè)計(jì)模式與開發(fā)實(shí)踐閱讀筆記 迭代器模式:一個(gè)相對(duì)簡(jiǎn)單的模式,目前絕大多數(shù)語言都內(nèi)置了迭代器,以至于大家都不覺得這是一種設(shè)計(jì)模式 迭代器模式 迭代器模式指提供一種方法訪問一個(gè)聚合對(duì)象中的各個(gè)元素,而又不需要暴露該...
摘要:訂閱模式的一個(gè)典型的應(yīng)用就是后面會(huì)寫一篇相關(guān)的讀書筆記。享元模式享元模式的核心思想是對(duì)象復(fù)用,減少對(duì)象數(shù)量,減少內(nèi)存開銷。適配器模式對(duì)目標(biāo)函數(shù)進(jìn)行數(shù)據(jù)參數(shù)轉(zhuǎn)化,使其符合目標(biāo)函數(shù)所需要的格式。 設(shè)計(jì)模式 單例模式 JS的單例模式有別于傳統(tǒng)面向?qū)ο笳Z言的單例模式,js作為一門無類的語言。使用全局變量的模式來實(shí)現(xiàn)單例模式思想。js里面的單例又分為普通單例和惰性單例,惰性單例指的是只有這個(gè)實(shí)例...
摘要:策略模式可以避免代碼中的多重判斷條件。策略模式在程序中或多或少的增加了策略類。此文僅記錄本人閱讀設(shè)計(jì)模式與開發(fā)實(shí)踐這個(gè)本時(shí)的感受,感謝作者曾探寫出這么好的一本書。設(shè)計(jì)模式中很重要的一點(diǎn)就是將不變和變分離出來。參考設(shè)計(jì)模式與開發(fā)實(shí)踐曾探 策略模式的定義是:定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且是它們可以相互替換。 策略模式可以避免代碼中的多重判斷條件。 策略模式很好的體現(xiàn)了開放-...
摘要:觀察構(gòu)造函數(shù)的代碼,該構(gòu)造函數(shù)實(shí)際上負(fù)責(zé)了兩件事情第一是創(chuàng)建對(duì)象和執(zhí)行初始化方法,第二是保證只有一個(gè)對(duì)象。惰性單例在實(shí)際開發(fā)中非常有用,是單例模式的重點(diǎn)。 單例模式 單例模式的定義是: 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 單例模式是一種常用的模式,有一些對(duì)象我們往往只需要一個(gè),比如線程池、全局緩存、瀏覽器的window對(duì)象等。例如,當(dāng)我們點(diǎn)擊登錄按鈕時(shí),頁面會(huì)彈出一...
摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對(duì)字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書里的一些問題。將會(huì)討論安全的類型檢測(cè)、惰性載入函數(shù)、凍結(jié)對(duì)象、定時(shí)器等話題。1. 安全的類型檢測(cè)...
閱讀 2575·2021-10-11 10:58
閱讀 1157·2021-09-29 09:34
閱讀 1513·2021-09-26 09:46
閱讀 3837·2021-09-22 15:31
閱讀 740·2019-08-30 15:54
閱讀 1462·2019-08-30 13:20
閱讀 1257·2019-08-30 13:13
閱讀 1491·2019-08-26 13:52