JavaScript设计模式之单例模式详解
程序员文章站
2022-07-05 20:30:16
最近项目不太忙,难得有时间看看书,平时挺喜欢js这门语言。也看过很多高级教程,觉得自己还是比较热衷于js的设计模式。这一次重温一下《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);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。