欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。