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

資訊專欄INFORMATION COLUMN

Decorate和Proxy模式

Chaz / 851人閱讀

摘要:但是如果請求地址沒有和中定義的地址匹配上,那么這個(gè)時(shí)候就會調(diào)用原生的去發(fā)送這個(gè)請求。比如中間件的實(shí)現(xiàn)

Decorate模式

Decorate模式的幾個(gè)常見的應(yīng)用場景:

throttle(函數(shù)節(jié)流)

debounce(函數(shù)防抖)

AOP

裝飾者模式基本的套路就是在不改變原有的函數(shù)提供的功能的情況下,再次封裝提供額外的功能

函數(shù)防抖即在一定的時(shí)間間隔s秒內(nèi)重復(fù)觸發(fā)某個(gè)動作的話,這個(gè)動作都會被延遲執(zhí)行,只有等到這s秒沒有再觸發(fā)這個(gè)動作的時(shí)候再去執(zhí)行.例如在使用input標(biāo)簽進(jìn)行實(shí)時(shí)搜索的時(shí)候,如果不加函數(shù)防抖時(shí),那么每次你輸入一個(gè)字符,或者是按下一次鍵盤就會發(fā)送一次,這樣對于網(wǎng)絡(luò)請求的消耗比較大,所以對你所監(jiān)聽的字符長度或者鍵盤事件的回調(diào)函數(shù)再用debounce進(jìn)行封裝一次,在規(guī)定的時(shí)間范圍里不重復(fù)觸發(fā),只有到規(guī)定的時(shí)間范圍里面沒有再次觸發(fā)這個(gè)動作的時(shí)候再去執(zhí)行回調(diào)函數(shù):

    function debounce (fn, dur) {
        let timer = null
        return function (...args) {
            clearTimer(timer)
            timer = setTimeout(() => {
                timer = null
                fn.apply(this, args)
            }, dur)
        }
    }

關(guān)于AOP的例子,可戳我&version=12010310&nettype=WIFI&fontScale=100&pass_ticket=Rxc3/D6oYRoNUmB+eyGQ8y1V5O76bWdXCv0Un4GOeFw=)

proxy 模式

proxy模式和decorate模式在代碼組織的套路上有點(diǎn)相似,但是二者的功能及側(cè)重點(diǎn)有些差別:

proxy模式在不改變原有函數(shù)的功能上,去改變最后的執(zhí)行過程和結(jié)果。比如大家可能使用過的mockjs.

在你開發(fā)環(huán)境當(dāng)中,引入這個(gè)庫,事實(shí)上在mockjs將整個(gè)xhr的事件和方法等都模擬了一遍,核心的套路就是對外暴露和原生的xhr一致的對象和方法,但是在開發(fā)環(huán)境下,如果你的請求地址和你在mockjs中定義的需要攔截的地址能匹配上,那么會調(diào)用mockjs中重寫的xhr的方法,你會發(fā)現(xiàn)你的請求沒有發(fā)出去,而是被mockjs攔截了。但是如果請求地址沒有和mockjs中定義的地址匹配上,那么這個(gè)時(shí)候就會調(diào)用原生的xhr去發(fā)送這個(gè)請求。

具體的實(shí)現(xiàn)請戳我

總結(jié)

proxy模式是在原有的函數(shù)的基礎(chǔ)上進(jìn)行一次封裝,將本體封裝為proxy去供外部調(diào)用,封裝后的函數(shù)向外提供的API方法和原有的函數(shù)保持一致,但是在封裝函數(shù)內(nèi)部做出一些額外的處理。比如上面提到的mockjs,當(dāng)沒有匹配到定義的路徑后,會使用原生的xhr去發(fā)送這個(gè)請求.

因此你使用的時(shí)候訪問順序是: proxy -->> 本體

decorate同樣也是在原有的函數(shù)的基礎(chǔ)上進(jìn)行封裝,但是封裝后的函數(shù)在原有函數(shù)的基礎(chǔ)上新增一些其他的功能。比如express中間件的實(shí)現(xiàn).

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

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

相關(guān)文章

  • 用ES6重寫《JavaScript Patterns》中的設(shè)計(jì)模式

    摘要:所以自己動手用重新實(shí)現(xiàn)了一遍里面的設(shè)計(jì)模式,算是對其的鞏固,也算是與大家一起來研究探討語法的一些最佳實(shí)踐。 前言 最近在回顧設(shè)計(jì)模式方式的知識,重新翻閱了《JavaScript模式》(個(gè)人感覺也算是一本小有名氣的書了哈)一書,讀時(shí)總有感觸:在即將到來的ES6的大潮下,書中的許多模式的代碼可用ES6的語法更為優(yōu)雅簡潔的實(shí)現(xiàn),而另一些模式,則已經(jīng)被ES6原生支持,如模塊模式(99頁)。所...

    taohonghui 評論0 收藏0
  • Python裝飾器

    摘要:一引用書流暢的書二基本概念問題裝飾器是什么解答嚴(yán)格來說,裝飾器只是語法糖,裝飾器是可調(diào)用的對象,可以像常規(guī)的可調(diào)用對象那樣調(diào)用,特殊的地方是裝飾器的參數(shù)是一個(gè)函數(shù)問題裝飾器有什么特性解答裝飾器有個(gè)特性,一是可以把被裝飾的函數(shù)替換成其他函數(shù), 一, 引用 [書] 流暢的Python [書] Effective Python 二, 基本概念 showImg(https://segme...

    aisuhua 評論0 收藏0
  • PHP中的設(shè)計(jì)模式 <持續(xù)更新中...>

    摘要:工廠模式工廠模式代碼片段訪問靜態(tài)屬性要加符靜態(tài)方法生成實(shí)例對象,作為函數(shù)的參數(shù)工廠就是負(fù)責(zé)生成對象的類或方法工廠模式,是把創(chuàng)造者類和要生產(chǎn)的類分開,創(chuàng)建者是個(gè)工廠類,定義了用于生產(chǎn)產(chǎn)品對象的方法行程特殊的代碼重復(fù),不必要的子類話,為了工 工廠模式 /* 工廠模式代碼片段*/ class Employee{ private static $type = array(minio...

    mgckid 評論0 收藏0
  • 《JavaScript 模式》知識點(diǎn)小抄本(上)

    摘要:單體模式有以下優(yōu)點(diǎn)用來劃分命名空間,減少全局變量數(shù)量。通常我們使用操作符創(chuàng)建單體模式的三種選擇,讓構(gòu)造函數(shù)總返回最初的對象使用全局對象來存儲該實(shí)例不推薦,容易全局污染。實(shí)現(xiàn)該工廠模式并不困難,主要是要找到能夠穿件所需類型對象的構(gòu)造函數(shù)。 介紹 最近開始給自己每周訂個(gè)學(xué)習(xí)任務(wù),學(xué)習(xí)結(jié)果反饋為一篇文章的輸出,做好學(xué)習(xí)記錄。 這一周(02.25-03.03)我定的目標(biāo)是《JavaScri...

    didikee 評論0 收藏0
  • FE.BASE-前端設(shè)計(jì)模式、編碼與重構(gòu)筆記

    摘要:高質(zhì)量特性面向?qū)ο螅瑹o類,原型可維護(hù)的代碼可讀一致可預(yù)測看起來像是同一個(gè)人寫的文檔減少全局對象,傳參訪問全局對象單模式,忘記時(shí)的副作用顯式聲明的全局變量無法用刪除不擴(kuò)充內(nèi)置原型模式每個(gè)和對齊這里不考慮花括號相關(guān)的縮進(jìn)規(guī)則每個(gè)中的代碼整齊縮進(jìn) 高質(zhì)量Javascript Javascript特性:面向?qū)ο?,無類,原型 可維護(hù)的代碼(可讀;一致;可預(yù)測;看起來像是同一個(gè)人寫的;文檔) 減...

    SmallBoyO 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<