JavaScript设计模式 -- 单例模式

252 阅读1分钟

单例模式

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

JavaScript中单例模式中常见应用:

  • 定义命名空间
  • 创建代码库
  • 创建静态变量
  • 惰性单例

命名空间

适当的使用命名空间,并不会杜绝全局变量,但可以减少全局变量的数量

var nameSpace = {
    g: function(id){
        return document.getElementById(id);
    },
    css: function(id,key,value){
       this.g(id).style[key] = value; 
    }
}

静态变量

var Conf = (function(){
    // 私有变量
    var conf = {
        COUNT: 1000,
        MAX_NUM: 10000,
        MIN_NUM: 1,
    }
    return {
        get: function(key){
            return conf[name]?name[name]:null;
        }
    }
})()
// 使用变量
var count = Conf.get('COUNT');

惰性单例

惰性单例指的是在需要的时候才创建对象实例。比如登陆窗口

通用的惰性单例

var getSingle = function(fn){
    var result;
    return function(){
        return result || (result = fn.apply(this,arguments));
    }
}

var createLogin = function(){
    var div = document.createElement('div');
    div.innerHTML = '我是登陆窗口';
    div.style.display = 'none';
    document.body.appendChild(div);
    return div;
}

var createSingleLoign = getSingle(createLogin);