zoukankan      html  css  js  c++  java
  • js设计模式-代理模式

    1.什么是设计模式?

    设计模式:在软件设计过程中常用的代码规范,针对特定的场景

    2.应用场景:

    麦当劳点餐  观察者模式   规定的代码格式

    花店送花  :代理模式

    真实对象(男同学)-----代理对象(花店人员)----用户(女同学)

     //声明女孩对象(用户)
     var girl = function(name){
       this.name = name;
       console.log(this);
     }
    //声明男同学(真实对象)
    var boy = function(girl){
        //女同学
        this.girl = girl;
        //送花 行为
        this.sendCift = function(gift){
            console.log("hi"+this.girl.name+",送你一个礼物"+gift);//hi小芳,送你一个礼物999朵玫瑰
        }
    }
    
    //代理对象 花店员工(代理对象)
    var ProxyObj = function(girl){
        this.girl = girl;//需要知道女孩信息
        this.sendCift = function(gift){
            (new boy(this.girl)).sendCift(gift);//替人送花
        }
    }
    //调用
    var girl = new girl("小芳");
    var proxy = new ProxyObj(girl);
    proxy.sendCift("999朵玫瑰")

    图片懒加载 :代理模式

    真实图片(较大,加载慢)---代理图片(较小,加载快)---浏览器

    window.onload = function(){
         var myImage = (function(){ //自执行函数
         var imgNode = document.createElement("img"); //创建图片节点
         document.body.appendChild(imgNode); //把创建的图片加入到body
         var img = new Image(); //代理对象,先展示等待图片 接着负责拉取真实图片
         img.onload = function(){ //当真实图片加载完毕后触发
             setTimeout(()=>{
                 imgNode.src = this.src; //最后 将用真实图片把展示的等待图片替换
             },2000)
         }
         return { //返回一个对象 myImage
             setSrc:function(src){
                 //先展示等待的图片 小图片
                 imgNode.src = "http://img.lanrentuku.com/img/allimg/1212/5-121204193R0.gif";
                    img.src = src; //把真实图片给代理对象
             }
         }
         })()
         //把真实图片给到myImage对象
          myImage.setSrc("https://www.baidu.com/img/bd_logo1.png") //真实图片地址
    }
    使用代理模式重构图片懒加载
    //真实对象
    var myImage = (function(){
        var imgNode = document.createElement("img"); //创建图片节点
        document.body.appendChild(imgNode); //把创建的图片加入到body
        return { 
             //返回一个对象 myImage
              setSrc:function(src){
                    imgNode.src = src;
              }
         }
    })()
       
    //代理对象 var ProxyImage = (function(){ var img = new Image(); img.onload = function(){ setTimeout(()=>{ myImage.setSrc(this.src); //最后 将用真实图片把展示的等待图片替换 },2000) } return { //返回一个对象 myImage setSrc:function(src){ //先展示等待的图片 小图片 myImage.setSrc("http://img.lanrentuku.com/img/allimg/1212/5-121204193R0.gif"); mg.src = src; } } })();
    //用户 ProxyImage.setSrc("https://www.baidu.com/img/bd_logo1.png")
  • 相关阅读:
    游戏大厅升级日记 第3天
    GamePlatform 2.0 b的数据库脚本
    会xiaotie的一个TCP问题
    求助,基于WCF的聊天室,在用户非法掉线后,不能将Disconnected事件通知到Server
    SQL Server 聚合函数 (方差和标准差)
    体验了一把vs2008
    老罗语录打包下载(保证能下载)
    局域网单独一台机器无法ping通网关故障的解决方法
    vs2005中遇到的一个奇怪的错误 
    Page.RegisterClientScriptBlock和Page.RegisterStartupScript有何区别
  • 原文地址:https://www.cnblogs.com/hdff/p/12034971.html
Copyright © 2011-2022 走看看