前端设计模式之代理模式复习

85 阅读3分钟

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

定义:

给某一个对象提供一个代理对象,并由该代理对象控制对原来对象的引用

功能:

  1. 中介隔离作用:在某些情况下,某一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,特征是代理类和委托类实现相同的接口。

  2. 开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则

代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等

代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如我们想给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类

分类:

  1. 保护代理(应用前端校验,登录操作权限功能)

通过代理来处理一些不必要的信息,过滤掉一些无用信息,叫做保护代理

注意: 在 JavaScript 不容易实现保护代理,因为我们无法判断谁访问了某个对象

  1. 远程代理(应用查看多个对象的状态) 远程代理可以作为另一个JVM上对象的本地代表。调用代理的方法,会被代理利用网络转发到远程执行,并且结果会通过网络返回给代理,再由代理将结果转给客户

  2. 虚拟代理(应用图片加载,文件上传)

虚拟代理作为创建开销大的对象的代表,经常会直到我们真正需要一个对象的时候才创建它。

当对象在创建前和创建中时,由虚拟代理地来扮演对象的替身对象创建后,代理就会将请求直接委托给对象

  1. 智能代理(应用提供服务其他功能)

调用对象代理处理另外一些事情如垃圾回收机制增加额外的服务

  1. 缓存代理

缓存代理的目的,是为一些开销大的运算结果提供暂时存储,以便下次调用时,参数与结果不变情况下,从缓存返回结果,而不是重新进行本体运算,减少本体调用次数。

优缺点:

优点:代理模式能将代理对象与被调用对象分离,降低了系统的耦合度。代理模式在客户端和目标对象之间起到一个中介作用,这样可以起到保护目标对象的作用。代理对象也可以对目标对象调用之前进行额外操作

缺点:增加了系统的复杂度