代理模式

简介

代理模式的定义:
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

优点:
(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前端开发中使用到。

posted @ 2017-09-27 09:12  小小坤  阅读(177)  评论(0编辑  收藏  举报