Decorate和Proxy模式

栏目: 编程工具 · 发布时间: 7年前

内容简介:Decorate和Proxy模式

Decorate模式

Decorate 模式的几个常见的应用场景:

  • throttle(函数节流)

  • debounce(函数防抖)

  • AOP

装饰者模式基本的套路就是在 不改变原有的函数提供的功能的情况下,再次封装提供额外的功能

函数防抖即在一定的时间间隔 s 秒内重复触发某个动作的话,这个动作都会被延迟执行,只有等到这 s 秒没有再触发这个动作的时候再去执行.例如在使用 input 标签进行实时搜索的时候,如果不加函数防抖时,那么每次你输入一个字符,或者是按下一次键盘就会发送一次,这样对于网络请求的消耗比较大,所以对你所监听的字符长度或者键盘事件的回调函数再用 debounce 进行封装一次,在规定的时间范围里不重复触发,只有到规定的时间范围里面没有再次触发这个动作的时候再去执行回调函数:

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

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

proxy 模式

proxy 模式和 decorate 模式在代码组织的套路上有点相似,但是二者的功能及侧重点有些差别:

proxy 模式在不改变原有函数的功能上,去改变最后的执行过程和结果。比如大家可能使用过的 mockjs .

在你开发环境当中,引入这个库,事实上在 mockjs 将整个 xhr 的事件和方法等都模拟了一遍,核心的套路就是对外暴露和原生的 xhr 一致的对象和方法,但是在开发环境下,如果你的请求地址和你在 mockjs 中定义的需要拦截的地址能匹配上,那么会调用 mockjs 中重写的 xhr 的方法,你会发现你的请求没有发出去,而是被 mockjs 拦截了。但是如果请求地址没有和 mockjs 中定义的地址匹配上,那么这个时候就会调用原生的 xhr 去发送这个请求。

具体的实现请戳我

总结

proxy 模式是在原有的函数的基础上进行一次封装,将本体封装为 proxy 去供外部调用,封装后的函数向外提供的 API 方法和原有的函数保持一致,但是在封装函数内部做出一些额外的处理。比如上面提到的 mockjs ,当没有匹配到定义的路径后,会使用原生的 xhr 去发送这个请求.

因此你使用的时候访问顺序是: proxy -->> 本体

decorate 同样也是在原有的函数的基础上进行封装,但是封装后的函数在原有函数的基础上新增一些其他的功能。比如 express 中间件的实现.


以上所述就是小编给大家介绍的《Decorate和Proxy模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法数论

算法数论

裴定一、祝跃飞 / 科学出版社 / 2002年09月 / 19.00

本书论述了算法数论的基本内容,其中包括:连分数、代数数域、椭圆曲线、素性检验、大整数因子分解算法、椭圆曲线上的离散对数、超椭圆曲线。本书的特点是内容涉及面广,在有限的篇幅内,包含了必要的预备知识和数学证明,尽可能形成一个完整的体系。并且本书的部分内容曾多次在中国科学院研究生院信息安全国家重点实验室和广州大学作为硕士研究生教材使用。 本书可作为信息安全、数论等专业的研究生教材及相关专业的研究人......一起来看看 《算法数论》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具