js设计模式-代理模式
2024-10-07 01:09:35
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")
最新文章
- .NET正则基础——.NET正则类及方法应用
- Javascript Array.prototype.some()
- Project Euler 89:Roman numerals 罗马数字
- AndroidのUI设计研究(一)——自定义ProgressBar
- SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)
- android开发基本流程
- Creating a settings table that can handle almost any type of value
- 前端MVVM学习之KnockOut(二)
- mybatis-redis项目分析
- 1088: [SCOI2005]扫雷Mine
- 基于itchat的微信群聊小助手基础开发(一)
- 【js 实践】js 实现木桶布局
- MariaDB/MySQL用户和权限管理
- 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil
- 2019-2-13TextBox技巧
- webstorm没有及时将改动保存到文件盘的问题
- 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 .
- sqlserver 误删数据库恢复
- Cannot read property ‘msie’ of undefined错误原因以及解决方案
- 算法笔记_126:算法集训之编程大题集二(Java)