设计模式
Posted lianqing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式相关的知识,希望对你有一定的参考价值。
惰性函数(减少浏览器无用的判断 提高性能)
function getStyle(obj,attr){ if(obj.currentStyle){ getStyle = function(obj,attr){ return obj.currentStyle[attr]; } }else{ getStyle = function(obj,attr){ return getComputedStyle(obj,false)[attr]; } } return getStyle(obj,attr); }
如果在某一条件下重复执行那串相同的代码可以用惰性函数
单例模式(单例模式是一种简单但非常实用的模式,特别是惰性单例技术,在合适的时候才创建对像,并且只创建唯一的一个。更奇妙的是,创建对象和管理单例的职责被分布在两个不同的方法中,这两个方法组合起来才具有单例模式的威力。
通过闭包实现单例模式同时具备惰性 var fn=(function(){ var div return function(){ if(!div){ div=document.createElement("div") }else{ fn=function(){ return div 还可以是一个对象 } }} })() var p1=fn() var p2=fn() console.log(fn)
代理模式(代理模式(有2个对象 第二个对象想调用第一个对象里面的东西从空间里面取出))
function 我(){ } 我.prototype={ 吃饭:function(){ console.log(‘我正在吃饭‘) }, 睡觉:function(){ console.log(‘我正在睡觉‘) }, 学习:function(){ console.log(‘我在学习‘) } } function 你(){ this.你=new 我() } 你.prototype={ 帮忙吃饭:function(money){ if(money>100){ this.你.吃饭() } }, 帮忙睡觉:function(money){ if(money>200){ this.你.睡觉() } }, 帮忙学习:function(money){ if(money>300){ this.你.学习() } } } var 帮你=new 你() 帮你.帮忙吃饭(300)
发布订阅模式
有2个对象服务端和客户端
如下:
客户端:QQ 号 具有订阅功能
服务端:1.将客户端加进一个数组内保存起来。
2.通过循环向他们发送消息。
function QQ(qq) { this.qq=qq this.订阅=function(msg){ console.log(this.qq+‘收到消息‘+msg) } } function Email(){ this.订阅者=[] } Email.prototype={ 添加订阅者:function(p){ this.订阅者.push(p) }, 信息:function(msg){ return "今天是XX活动,赶快上线领取终极大礼包" }, 通知:function(){ for(var i in this.订阅者){ this.订阅者[i].订阅(this.信息()) } } } var email=new Email() email.添加订阅者(new QQ(132321)) email.添加订阅者(new QQ(21421)) email.添加订阅者(new QQ(214214)) email.通知()
以上是关于设计模式的主要内容,如果未能解决你的问题,请参考以下文章