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")
  • 相关阅读:
    STL——increment/decrement/dereference操作符
    STL——静态常量整数成员在class内部直接初始化
    STL——临时对象的产生与运用
    C++中模板类使用友元模板函数
    模板编程中的技巧
    plsql 表数据中文显示乱码(配置环境变量)
    plsql 常用快捷键(自动替换)
    javascript 跳出(终止)forEach循环
    plsql 快捷键配置
    plsql oracle client没有正确安装(plsql连接远程数据库)
  • 原文地址:https://www.cnblogs.com/hdff/p/12034971.html
Copyright © 2011-2022 走看看