代理,顾名思义就是帮助别人作事,GoF对代理模式的定义以下:html
代理模式(Proxy),为其余对象提供一种代理以控制对这个对象的访问。代理模式使得代理对象控制具体对象的引用。代理几乎能够是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。设计模式
解释:房屋中介,能够代理帮助卖家把房子卖给买家,这中间卖家说要卖的价钱就能够了,买家也能够提出本身要买的房型,中介能够帮忙处理中间环节。最后达成买卖。中介能够同时代理不少房屋买卖,而且能够代理租房事宜。安全
模式做用:函数
一、远程代理(一个对象将不一样空间的对象进行局部代理)this
二、虚拟代理(根据须要建立开销很大的对象如渲染网页暂时用占位代替真图)spa
三、安全代理(控制证明对象的访问权限)prototype
四、智能指引(调用对象代理处理另一些事情如垃圾回收机制)设计
注意事项:代理
一、不能滥用代理,有时候仅仅是给代码增长复杂度code
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <script> //代理模式须要三方 //1.买家 function maijia(){ this.name = "小明"; this.money = "30万"; } //2.中介 function zhongjie(){ } zhongjie.prototype.maifang = function(){ //new fongdong(new maijia()).maifang("20万"); new fongdong(new maijia()).maifang("20万"); } //3.卖家 function fongdong(maijia){ this.maijia_name = maijia.name; this.maijia_money = maijia.money; this.maifang = function(money){ // alert("收到了来自【"+this.maijia_name+"】"+money+"人民币"); alert("收到了来自【"+this.maijia_name+"】"+this.maijia_money+"人民币"); } } (new zhongjie()).maifang(); </script> <script> // A2B function A(){ this.money = "20RMB"; } function to(){ if(!(this instanceof to)){ return new to; } } to.prototype.maifang = function(){ var a = new A(); new B().maifang(a.money); } function B(){ this.maifang = function(money){ alert("收到了钱"+money); } } (new to()).maifang(); to().maifang(); </script> </body> </html>
其余设计模式连接: