08-单例模式

1、模式定义
单例模式,又被称为单体模式,是只允许实例化一次的对象类。比如我们用一个对象来规划命名空间,并井井有条地管理对象上的属性和方法。
单例模式,可能是JavaScript中最常见的一种设计模式了。这种模式经常用于为我们提供一个命名空间,比如jQuery库就使用了单例模式提供了一个命名空间 $ 。单例模式,是一种代码管理的优秀实践。
2、用单例模式提供一个独立的命名空间

// 单例模式(提供一个独立的命名空间) var Xia = { g: function(id){ return document.getElementById(id); }, css: function(id,key,value){ this.g(id).style[key] = value; }, attr: function(id,key,value){ this.g(id)[key] = value; }, html: function(id,type,fn){ this.g(id)['on'+type] = fn; } }

【08-单例模式】3、单例模式可以让模块更加分明
单例模式除了可以提供独立的命名空间以外,还可以用来管理代码库中的多个模块。
// 单例模式的另一个作用:模块分明 baidu.dom.addClass// 添加新元素 baidu.dom.append// 插入元素 baidu.event.stopPropagation baidu.event.preventDefault baidu.string.trim baidu.string.encodeHTML

// 用单例模式,自定义模块库 var A = { Util: { util_method1: function(){}, util_method2: function(){} }, Tool: { tool_method1: function(){}, tool_method2: function(){} }, Ajax: { get: function(){}, post: function(){} }, Others: { // ... } }// 使用自己的模块 A.Util.util_method2(); A.Ajax.get();

4、用单例模式实现静态变量(不可改变的变量)
JavaScript语言没有提供 static 静态的变量。因此,在理论上讲,所有的JavaScript变量都可以被修改。如何代码示例,我们实现了静态变量功能,使得这些变量只能被访问而不能被修改。
// 用单例模式管理静态变量 var Conf = (function(){ // 不可修改的静态变量,其标识符通常都大写 var conf = { MAX_NUM: 1000, MIN_NUM: 1, COUNT: 500 }; // 返回取值对象 return { get: function(name){ return conf[name] ? conf[name] : null; } } // 没有setter赋值器,我们就不能修改这些变量,即实现了静态变量的功能 })(); // 测试 var count = Conf.get('COUNT'); console.log(count);

5、惰性单例
有时候,对于单例对象需要被延迟创建,所以在单例模式中还存在一种延迟创建单例的形式,即“惰性单例”。
// 单例的延迟创建、惰性创建 var LazySingle = (function(){ // 单例实例的引用 var _instance = null; // 单例 function Single(){ return { publicMethod: function(){}, publicProperty: '1.0' } } // 延迟创建单例 return function(){ if(!_instance){ _instance = Single(); } return _instance; } })(); // 测试 console.log(LazySingle().publicProperty);


完!!!

    推荐阅读