• 代理模式


    简介

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

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

  • 相关阅读:
    修复TabControl在Binding情况下Canvas被复用的问题
    避免缓加载时因违反惯例导致的空引用!
    乱说一气
    WPF中的数据验证
    [zz]GPU architecture
    [zz]DirectX 11 and Shared Model 5.0
    网页栅格系统中的最佳宽度:960px
    复习html标签及其属性
    去除链接虚线边框css
    使用jquery解决IE6不兼容的伪类
  • 原文地址:https://www.cnblogs.com/xiaoxiaokun/p/7599990.html
Copyright © 2020-2023  润新知