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")

最新文章

  1. .NET正则基础——.NET正则类及方法应用
  2. Javascript Array.prototype.some()
  3. Project Euler 89:Roman numerals 罗马数字
  4. AndroidのUI设计研究(一)——自定义ProgressBar
  5. SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)
  6. android开发基本流程
  7. Creating a settings table that can handle almost any type of value
  8. 前端MVVM学习之KnockOut(二)
  9. mybatis-redis项目分析
  10. 1088: [SCOI2005]扫雷Mine
  11. 基于itchat的微信群聊小助手基础开发(一)
  12. 【js 实践】js 实现木桶布局
  13. MariaDB/MySQL用户和权限管理
  14. 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil
  15. 2019-2-13TextBox技巧
  16. webstorm没有及时将改动保存到文件盘的问题
  17. SQL Server does not purge row versioning records even the transaction are committed if there are other open transaction running in the databases with read-committed snapshot enabled .
  18. sqlserver 误删数据库恢复
  19. Cannot read property ‘msie’ of undefined错误原因以及解决方案
  20. 算法笔记_126:算法集训之编程大题集二(Java)

热门文章

  1. 高性能SQLServer分页语句
  2. mac 下拉取svn代码
  3. bom and dom
  4. spring JdbcTemplate如何返回多个结果集
  5. nagios-调用脚本
  6. Redis03——Redis架构
  7. IntelliJ IDEA安装后几个重要的目录及配置文件讲解
  8. 通过jenkins api远程调用job
  9. 使用pycharm,配置环境
  10. Java发送POST请求,参数为JSON格式,并接收返回JSON数据