代理模式的思想就是在对象与对象的客户端之间建立一个新的对象,这个新的对象负责执行原对象的职责与客户端进行交互。这与之前的外观模式的区别是,外观模式将原对象包装起来,真正执行任务的依然是原对象的本身。
比如在浏览器的网络请求中就是一种代理模式,在浏览器中通过JS实现的网络请求最终会通过浏览器的内核中的网络事件管理对象去执行网络请求任务。
说的简单点,js将网络请求数据交给浏览器的网络代理,网络代理将请求数据添加到自己身上去真正的执行网络请求。
设计模型:
//服务的对象 let obj = { data:"aaa", fun:function(){ return this.data; } } //客户对象 let obj2 = { fu:function(value){ console.log(value); } } //代理对象 let age = { data:obj.data, f:function(){ return this.data; } }
测试:
obj2.fu(obj.fun()); //aaa obj2.fu(age.f()); //aaa
代理模式的关键代理对象负责代替原对象执行相关任务,并不改变原对象的功能。