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")
原文地址:https://www.cnblogs.com/hdff/p/12034971.html