Javascript设计模式学习二(单例)

页面导航:首页 > 网络编程 > JavaScript > Javascript设计模式学习二(单例)

Javascript设计模式学习二(单例)

来源:互联网 作者:脚本宝典 时间:2015-09-18 13:29 【

定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点 普通的单例模式: 使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点

普通的单例模式:
  使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象。
比如:使用一个变量instance标记是否创建了这个类对象,现在需要用到一个Single类,先判断instance是否为null,若不是则直接return返回,若是则new Singleton();

var instance = null;
return function(){
    if(!instance){
        instance = new Singleton();
    }
    return instance;
}
JavaScript中,我们经常会把全局变量当成单例来使用,但全局变量容易造成命名空间污染,使用命名空间可以减少全局变量的数量。
我们常在管理命名空间时使用单例模式,它可以降低你在代码中创建全局变量的数量。
 
惰性单例:在需要的时候才创建对象实例。(非常有用)
通用的惰性单例:
  首先是管理单例逻辑封装在getSingle中,创建对象的方法fn被当作参数动态传入
var getSingle = function(fn){    var result;    return function(){        return result || (result = fn.apply(this,arguments));
    }
};

fn可以是创建弹窗的方法createDialog或者其他方法,传入getSingle后,返回一个新的函数,并且用一个变量result保存fn的结果,因为result在闭包中,所以它永远不会被销毁,如果result已经被赋值,那么它将返回这个值。

var createDialog = function(){    //创建Dialog代码}
document.getElementById("btn").onclick = function(){    var dialogLayer = getSingle(createDialog);//这样创建好Dialog了}

把创建实例对象和管理对象分别放置在两个方法里,这两个方法可以独立变化而互不影响,减低耦合。这两个方法组合起来才具有单例模式的神奇作用
这种单例模式的用途不止创建对象,可以用于“一次绑定事件”,还有其他。。

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<