设计模式

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.通知()

 

以上是关于设计模式的主要内容,如果未能解决你的问题,请参考以下文章

十条实用的jQuery代码片段

尝试使用片段保存夜间模式状态

如何更改谷歌地图标记上方的标题和片段设计

炫酷 CSS 背景效果的 10 个代码片段

添加片段时的 FlyOut 菜单设计问题

高效Web开发的10个jQuery代码片段