前言

代理模式应用非常广泛,比如es6的proxy,接口的反代,vue的响应式数据也用到了代理模式,由于用的很平常,导致对它的认知很模糊。

代理模式是一种结构型设计模式,它允许你提供对象的替代品或占位符。代理控制着对原始对象的访问,并允许在将请求传递给对象前后执行一些操作。

举个例子,比如前端常用的一个性能优化的方式:事件委托(事件代理)

我们给子元素的父元素绑定click事件,通过冒泡的方式统一在父元素处理事件逻辑,这样减少了事件的绑定。

这种方式其实又有点像是:中介者模式

中介者模式是一种行为设计模式,它通过引入一个中介对象来管理一组对象之间的交互。中介者模式可以将对象之间的复杂多对多关系简化为一对多关系,从而降低对象之间的耦合度,提高系统的可维护性。

虽然事件委托确实是1:N的关系,但是并不是中介者模式,首先代理模式的核心是通过一个代理对象来控制对目标对象的访问,而中介者更注重多个对象之间的通信和协调

事件委托中,父元素代理了所有子元素的事件,它关注的是处理事件的具体逻辑和简化绑定,而不是协调子元素对象之间的关系。即便它是1:N的,但是它不会心N与N之间的关系,所以它是一个代理模式。

中介者模式最经典的就是vue的事件bus(EventBus),对象与对象直接没有直接关系,都是通过evnetBus来通信的。

一些常见的应用场景

  1. 数据请求缓存,使用代理模式创建一个请求替代对象,当数据请求时,可以将之前得到的数据缓存的结果返回出来,从而节省服务器带宽和性能。
  2. 请求的防抖和节流处理,限制请求评率。
  3. 虚拟dom。

具体的代码就不提供了,都是很常见的东西。

分类: JavaScript设计模式与开发实践 标签: 代理模式JavaScript模式

评论

暂无评论数据

暂无评论数据

目录