JavaScript设计模式之单例模式详解

最近项目不太忙,难得有时间看看书,平时挺喜欢js这门语言。也看过很多高级教程,觉得自己还是比较热衷于js的设计模式。这一次重温一下《JavaScript设计模式与开发实践》,开篇为单例模式。

/**

* pre 单例模式

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

* 应用:单例模式是一种常用的模式,有一些对象我们往往只需要一个,

* 比如线程池、全局缓存、浏览器中的 window 对象等。

*/

//--------------singleton-01-------------

/*写法1*/

var Singleton = function(name){

this.name = name;

this.instance = null;

};

Singleton.prototype.getName = function(){

alert(this.name);

};

Singleton.getInstance = function(){

if(!this.instance){

this.instance = new Singleton(name);

}

return this.instance;

};

var a = Singleton.getInstance("amy");

var b = Singleton.getInstance("ben");

alert(a === b);

// ------------singleton-02----------------

/*写法2*/

var Singleton = function(name){

this.name = name;

}

Singleton.prototype.getName = function(){

return this.name;

}

Singleton.getInstance = (function(){

var instance = null;

return function(name){

if(!instance){

instance = new Singleton(name);

}

return instance;

}

})();

var a = Singleton.getInstance("amy");

var b = Singleton.getInstance("ben");

alert(a === b);

// ------------singleton03-----------

/*写法3*/

var Singleton = (function(){

var instance;

return function(name){

if(instance){

return instance;

}

this.name = name;

instance = this;

}

})();

var a = new Singleton("amy");

var b = new Singleton("ben");

alert(a === b);

//---------------- 示例 ---------------

var getSingleton = function(fn) {

var result;

return function() {

if(!result) {

result = fn.apply(this, arguments);

}

return result;

}

};

var getSingletonVip = (function() {

var instance;

return function(fn) {

return instance || (instance = fn.apply(this, arguments));

}

})();

var createLoginUser = function() {

var div = document.createElement("div");

div.innerHTML = '这是登录框';

document.body.appendChild(div);

return div;

};

var createInfoGrid = function() {

var div = document.createElement("div");

div.innerHTML = '这是列表信息框';

document.body.appendChild(div);

return div;

};

//--执行singleton1

var createUserDiv = getSingleton(createLoginUser);

createUserDiv();

createUserDiv();

//--执行singleton2

getSingletonVip(createLoginUser);

getSingletonVip(createLoginUser);

以上是 JavaScript设计模式之单例模式详解 的全部内容, 来源链接: utcz.com/z/324851.html

回到顶部