JavaScript设计模式之单例模式详解
最近项目不太忙,难得有时间看看书,平时挺喜欢js这门语言。也看过很多高级教程,觉得自己还是比较热衷于js的设计模式。这一次重温一下《JavaScript设计模式与开发实践》,开篇为单例模式。
/**
*pre单例模式
*定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
*应用:单例模式是一种常用的模式,有一些对象我们往往只需要一个,
*比如线程池、全局缓存、浏览器中的window对象等。
*/
//--------------singleton-01-------------
/*写法1*/
varSingleton=function(name){
this.name=name;
this.instance=null;
};
Singleton.prototype.getName=function(){
alert(this.name);
};
Singleton.getInstance=function(){
if(!this.instance){
this.instance=newSingleton(name);
}
returnthis.instance;
};
vara=Singleton.getInstance("amy");
varb=Singleton.getInstance("ben");
alert(a===b);
//------------singleton-02----------------
/*写法2*/
varSingleton=function(name){
this.name=name;
}
Singleton.prototype.getName=function(){
returnthis.name;
}
Singleton.getInstance=(function(){
varinstance=null;
returnfunction(name){
if(!instance){
instance=newSingleton(name);
}
returninstance;
}
})();
vara=Singleton.getInstance("amy");
varb=Singleton.getInstance("ben");
alert(a===b);
//------------singleton03-----------
/*写法3*/
varSingleton=(function(){
varinstance;
returnfunction(name){
if(instance){
returninstance;
}
this.name=name;
instance=this;
}
})();
vara=newSingleton("amy");
varb=newSingleton("ben");
alert(a===b);
//----------------示例---------------
vargetSingleton=function(fn){
varresult;
returnfunction(){
if(!result){
result=fn.apply(this,arguments);
}
returnresult;
}
};
vargetSingletonVip=(function(){
varinstance;
returnfunction(fn){
returninstance||(instance=fn.apply(this,arguments));
}
})();
varcreateLoginUser=function(){
vardiv=document.createElement("div");
div.innerHTML='这是登录框';
document.body.appendChild(div);
returndiv;
};
varcreateInfoGrid=function(){
vardiv=document.createElement("div");
div.innerHTML='这是列表信息框';
document.body.appendChild(div);
returndiv;
};
//--执行singleton1
varcreateUserDiv=getSingleton(createLoginUser);
createUserDiv();
createUserDiv();
//--执行singleton2
getSingletonVip(createLoginUser);
getSingletonVip(createLoginUser);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。