JavaScript 代理模式
前言
代理模式应用非常广泛,比如es6的proxy,接口的反代,vue的响应式数据也用到了代理模式,由于用的很平常,导致对它的认知很模糊。
代理模式是一种结构型设计模式,它允许你提供对象的替代品或占位符。代理控制着对原始对象的访问,并允许在将请求传递给对象前后执行一些操作。
举个例子,比如前端常用的一个性能优化的方式:事件委托(事件代理)
我们给子元素的父元素绑定click事件,通过冒泡的方式统一在父元素处理事件逻辑,这样减少了事件的绑定。
这种方式其实又有点像是:中介者模式
中介者模式是一种行为设计模式,它通过引入一个中介对象来管理一组对象之间的交互。中介者模式可以将对象之间的复杂多对多关系简化为一对多关系,从而降低对象之间的耦合度,提高系统的可维护性。
虽然事件委托确实是1:N的关系,但是并不是中介者模式,首先代理模式的核心是通过一个代理对象来控制对目标对象的访问,而中介者更注重多个对象之间的通信和协调。
事件委托中,父元素代理了所有子元素的事件,它关注的是处理事件的具体逻辑和简化绑定,而不是协调子元素对象之间的关系。即便它是1:N的,但是它不会心N与N之间的关系,所以它是一个代理模式。
中介者模式最经典的就是vue的事件bus(EventBus),对象与对象直接没有直接关系,都是通过evnetBus来通信的。
一些常见的应用场景
- 数据请求缓存,使用代理模式创建一个请求替代对象,当数据请求时,可以将之前得到的数据缓存的结果返回出来,从而节省服务器带宽和性能。
- 请求的防抖和节流处理,限制请求评率。
- 虚拟dom。
具体的代码就不提供了,都是很常见的东西。
分类:
JavaScript设计模式与开发实践
标签:
代理模式JavaScript模式
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据