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);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。