内容简介: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模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 简单工厂模式、工厂模式、抽象工厂模式的解析-iOS
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。