JS设计模式之代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问

其实就是给一个对象提供一个代理,如果要访问这个对象必须经过这个代理,先说,这个模式的优点是什么。

代理模式(Proxy Pattern)是一种常用的设计模式,它为其他对象提供一个代理以控制对这个对象的访问。代理模式的主要优点包括:

  1. 功能增强
    • 代理对象可以在不修改目标对象的前提下,为目标对象添加额外的功能。例如,可以在访问目标对象之前或之后添加日志记录、性能监控、事务管理、安全检查等。
  2. 控制访问
    • 代理模式可以控制对目标对象的访问,例如,根据条件决定是否允许访问目标对象,或者限制对目标对象的访问次数。
    • 可以实现远程对象的本地代理,隐藏实现细节,使得客户端与远程对象的交互更加简单。
  3. 安全性提高
    • 代理模式可以为目标对象提供一层保护,确保客户端无法直接访问目标对象,从而增强系统的安全性。
    • 可以在代理层进行安全验证,如权限验证、身份验证等,确保只有合法的客户端才能访问目标对象。
  4. 高内聚低耦合
    • 代理模式将具体的业务逻辑与访问控制、功能增强等代码分离,使得系统更加模块化、高内聚低耦合。
    • 当需要修改业务逻辑时,只需要修改目标对象,而不需要修改代理对象;同样,当需要修改访问控制或功能增强时,也只需要修改代理对象。
  5. 灵活性
    • 代理模式可以根据需要动态地创建不同类型的代理对象,以适应不同的场景和需求。
    • 可以使用代理模式实现延迟加载(Lazy Loading),即当真正需要访问目标对象时才创建其实例,以提高系统的性能和响应速度。
  6. 隐藏实现细节
    • 代理模式可以隐藏目标对象的实现细节,使得客户端只需要与代理对象交互,而不需要关心目标对象的内部实现。这有助于降低系统的复杂性,提高系统的可维护性和可扩展性。
  7. 易于扩展
    • 由于代理模式将业务逻辑与访问控制、功能增强等代码分离,因此可以很容易地扩展系统的功能。只需要添加新的代理类或修改现有的代理类即可实现新的功能需求。

现在来举个例子:假如有一个明星,当有活动和商演的时候,商家肯定不会直接找明星去谈活动价钱,会去找明星的经纪人,由经纪人去判断活动是否可以接,是否可以参加。

Star这个类就是明星,StarProxy这个类就是明星经纪人,假如我们是商家,现在我们想请这个明星来参加我们的活动,我们开始和经纪人谈价格,talk出价1w,此时经纪人会做一个判断,如果价格大于等于1w,这个活动就比较适合,可以参加,代理就会去通知明星演出,如果小于1w的话,就不会,这个就是简单的代理模式,我们要访问明星,需要经过经纪人(也就是代理),才能去访问。

Vue3中实现数据的响应,就是用的Proxy,下面提供一个简单的proxy代理模式的使用方法:

我们有一个明星,他叫Tom,他出场演出的价格需要1w,我们使用ES6提供的Proxy代理对象,作为我们明星的经纪人(代理),当我们要访问Tom是否可以演出的时候,就通过proxy.workprice进行访问,此时proxy的get方法就会触发,就会返回1w,如果说我们要跟经纪人谈价格,就是去出价,看Tom是否可以来演出,就可以通过proxy.workprice = 20000来进行询问,此时因为我们对Tom要访问修改了,被代理监听到,就会触发set方法,key此时就是workprice,并且value是20000,此时,经纪人(proxy)就会告诉我们可以合作,如果说我们一开始找经纪人说的价格是1w,proxy.workprice = 20000,此时,就会抛出错误,经纪人会告诉我们,这个价钱不合适,这个就是代理模式的用法。

  • 33
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值