代理模式
代理模式 (Proxy Pattern)又称
委托模式 ,它为目标对象创造了一个代理对象,以控制对目标对象的访问。
代理模式把代理对象插入到访问者和目标对象之间,从而为访问者对目标对象的访问引入一定的间接性。
例子
明星有经纪人(助理),拍广告只能找经纪人,经纪人能帮忙过滤掉一些不需要的广告。
代理类实现了一个跟代理目标相同的方法,额外的操作都在代理类中,以保护目标类的功能完整性不被破坏
es5 Object.defineProperty 实现对象代理功能
es6 Proxy 构造函数 实现代理功能
代理模式与适配器模式 区别
代理模式和适配器模式都为另一个对象提供间接性的访问
- 适配器模式 : 主要用来解决接口之间不匹配的问题,通常是为所适配的对象提供一个不同的接口;
- 代理模式 : 提供访问目标对象的间接访问,以及对目标对象功能的扩展,一般提供和目标对象一样的接口;
- 适配器模式, 修改方法名(修改成我们需要的名字),但是行为不改变。代理模式,不修改方法名,但是对行为进行了拓展,或者拦截。
拦截器和装饰者模式 区别
代理模式
控制访问
者对目标对象的访问,而装饰者模式只给目标对象
添加功能
,原有功能不变且可直接使用。Axios 拦截器是可以取消请求的,vue-router
路由拦截器也可以进行路由截停和重定向等等复杂操作,这些场景下,无疑是代理模式,因为这里的拦截器控制了对目标对象的访问,如果没有进行访问控制而只进行消息预处理和后处理,那么则可以当作是装饰者模式。