首页 / 设计模式 / js设计模式-享元模式
js设计模式-享元模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了js设计模式-享元模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5798字,纯文字阅读大概需要9分钟。
内容图文
![js设计模式-享元模式](/upload/InfoBanner/zyjiaocheng/1229/3045d325b73c4b5e84b1d42848e63c6e.jpg)
享元模式实际上是一种优化模式,目的在于提高系统的性能和代码的效率。
使用享元模式的条件:最重要的条件是网页中必须使用了大量资源密集型对象,如果只会用到了少许这类对象,那么这种优化并不划算。第二个条件是这些对象中所保存的数据至少有一部分能被转换为外在的数据。最后一个条件是,将外在的数据分离出去以后,独一无二的对象的数目相对减少。
使用享元模式的步骤:1、将所有外在的数据从目标类剥离。2、创建一个用来控制该类的实例化工厂。3、创建一个用来保存外在数据的管理器。
实例:工具提示对象。(Tooltip)
先看一个没有用到享元模式的例子。
<! DOCTYPE html > < html > < head > < meta charset ="UTF-8" > < title >工具提示对象</title><style type="text/css"> .test-div{ width:100px; heiht:30px;text-align:center; line-height: 30px; cursor: pointer;border:1px solid #101010; margin-top:20px;} .tooltip{ height:20px; line-height: 20px; border: 1px solid #ccc; border-radius: 2px; font-family: monospace; font-size: 12px; background: #ddd; padding:2px 5px;}</style></head><body><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div></body></html><script type="text/javascript"> window.onload =function(){ var aDiv = document.getElementsByTagName("div"); for(var i =0 , len = aDiv.length;i<len;i++){ new Tooltip(aDiv[i],"this is a div, the index is:"+ i); } } var Tooltip =function(targetElement,text){ this.target = targetElement; this.text = text; this.delayTimeout =null; // show tooltip timerthis.delay =500; // 延时时长//create the htmlthis.element = document.createElement("div"); this.element.style.display ="none"; this.element.style.position ="absolute"; this.element.className ="tooltip"; document.getElementsByTagName("body")[0].appendChild(this.element); this.element.innerHTML =this.text; //attach the eventsvar that =this; this.target.addEventListener("mouseover",function(e){ that.startDelay(e); }); this.target.addEventListener("mouseout",function(){ that.hide(); }) }; Tooltip.prototype = { startDelay:function(e){ if(this.delayTimeout ==null){ var that =this; var x = e.clientX; var y = e.clientY; this.delayTimeout = setTimeout(function(){ that.show(x,y); },this.delay); } }, show:function(x,y){ clearTimeout(this.delayTimeout); this.element.style.left = x +"px"; this.element.style.top = y +"px"; this.element.style.display ="block"; }, hide:function(){ clearTimeout(this.delayTimeout); this.delayTimeout =null; this.element.style.display ="none"; } } </script>
结果:把鼠标放到每个div上以后,用debug查看element元素,会发现生成很多tooltip的div。
使用享元模式以后:
<! DOCTYPE html > < html > < head > < meta charset ="UTF-8" > < title >工具提示对象</title><style type="text/css"> .test-div{ width:100px; heiht:30px;text-align:center; line-height: 30px; cursor: pointer;border:1px solid #101010; margin-top:20px;} .tooltip{ height:20px; line-height: 20px; border: 1px solid #ccc; border-radius: 2px; font-family: monospace; font-size: 12px; background: #ddd; padding:2px 5px;}</style></head><body><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div><div class="test-div">test div</div></body></html><script type="text/javascript" src="ToolTip.js"></script><script type="text/javascript"> window.onload =function(){ var aDiv = document.getElementsByTagName("div"); for(var i =0 , len = aDiv.length;i<len;i++){ TooltipManager.addTooltip(aDiv[i],"this is a div, the index is:"+ i); } } </script>
对应的js:
1 var TooltipManager = (function(){ 2var storedInstance = null; 3 4/*Tooltip class*/ 5var Tooltip = function(){ 6this.delayTimeout = null; // show tooltip timer 7this.delay = 500; // 延时时长 8 9//create the html10this.element = document.createElement("div"); 11this.element.style.display = "none"; 12this.element.style.position = "absolute"; 13this.element.className = "tooltip"; 14 document.getElementsByTagName("body")[0].appendChild(this.element); 15 }; 1617 Tooltip.prototype = { 18 startDelay:function(e,text){ 19if(this.delayTimeout == null){ 20var that = this; 21var x = e.clientX; 22var y = e.clientY; 23this.delayTimeout = setTimeout(function(){ 24 that.show(x,y,text); 25 },this.delay); 26 } 27 }, 28 show:function(x,y,text){ 29 clearTimeout(this.delayTimeout); 30this.element.style.left = x + "px"; 31this.element.style.top = y + "px"; 32this.element.style.display = "block"; 33this.element.innerHTML = text; 34 }, 35 hide:function(){ 36 clearTimeout(this.delayTimeout); 37this.delayTimeout = null; 38this.element.style.display = "none"; 39 } 40 }; 4142return { 43 addTooltip:function(targetElement,text){ 44var tt = this.getToolTip(); 45 targetElement.addEventListener("mouseover",function(e){tt.startDelay(e,text)}); 46 targetElement.addEventListener("mouseout",function(e){tt.hide()}); 47 }, 48 getToolTip:function(){ 49if(null == storedInstance){ 50 storedInstance = new Tooltip(); 51 } 52return storedInstance; 53 } 54 } 55 })();
结果:
结论:享元模式好处不言而喻。
原文:http://www.cnblogs.com/tengri/p/5351634.html
内容总结
以上是互联网集市为您收集整理的js设计模式-享元模式全部内容,希望文章能够帮你解决js设计模式-享元模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。