简介
代理模式的定义:
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点:
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
案例
在平时的工作中,代理模式与我们息息相关,如:小明的同事是小美,小美是个高颜值,和无可挑剔的曲线身材美女。一次小美在网上网购了一些化装品,由于天猫双十一。十月的工资全部交给了双十一。到了取快递是时候发现自己根本拿不完这么多东西。于是呼,小美对坐在旁边的小明说。明GG帮我拿快递好吗?小明看到小美哀求的眼神,楚楚动人。绅士般的答应到:‘没问题’。小明开开心心的去帮小美拿快递了。
从这个案例中可以看出,小明就起到了代理的作用。事情是小美拿快递,由于种种原因,只有让小明代替小美拿快递。
//快递店 var Expresspoint={ //给客户快递 pass:function(){ console.log('执行取快递'); } } //小明 var xiaoming={ //获得消息 getmsg:function(target){ target.pass(); } } //小美 var xiaomei={ //取快递 getExpress:function(target){ //小美告诉小明去取快递 xiaoming.getmsg(target); } } xiaomei.getExpress(Expresspoint);
结果小明走到半路发现身体有点不舒服,去了趟厕所花费了几分钟。
//快递店 var Expresspoint={ //给客户快递 pass:function(){ console.log('执行取快递'); } } //小明 var xiaoming={ //取快递 getmsg:function(target){ setTimeout(function(){ target.pass(); },500);//假设500毫秒解决 } } //小美 var xiaomei={ //取快递 getExpress:function(target){ //小美告诉小明去取快递 xiaoming.getmsg(target); } } xiaomei.getExpress(Expresspoint);
从 小明走到半路发现身体有点不舒服来看,小明只是代理者,至于什么时候去帮小美拿快递是小明决定的。比如:小美让小明在快递店买个蛋糕。
//快递店 var Expresspoint={ //给客户快递 pass:function(){ console.log('执行取快递'); } } //小明 var xiaoming={ //取快递 getmsg:function(target){ var tostr=Object.prototype.toString; if(target && tostr.call(target.pass)==="[object Function]"){ target.pass(); }else{ console.log('无法满足你的条件','代理者直接拒绝小美,快递店保持良好形象'); } } } //小美 var xiaomei={ //取快递 getExpress:function(target){ //小美告诉小明去取快递 xiaoming.getmsg(target); } } //买蛋糕 var Buycake={ buy:function(){ console.log('买蛋糕'); } } xiaomei.getExpress(Buycake);
这样代理者小明就起到了保护的作用。保持了快递店的良好形象。这里的小明是不是有点像咱们现实中的经纪人呢!比如拍电影需要先找经纪人,经纪人就是现实中最完美的代理者。
总结
代理模式是一种非常有意义的模式,代理模式的变体种类也很多这里只是简单介绍,希望你在web前端开发中使用到。