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


Posted in Javascript onJune 09, 2017

最近项目不太忙,难得有时间看看书,平时挺喜欢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 相关文章推荐
Javascript document.referrer判断访客来源网址
May 15 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
理解Javascript_13_执行模型详解
Oct 20 Javascript
写自已的js类库需要的核心代码
Jul 16 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 Javascript
es6 字符串String的扩展(实例讲解)
Aug 03 Javascript
js制作简单的音乐播放器的示例代码
Aug 28 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 Javascript
vue以组件或者插件的形式实现throttle或者debounce
May 22 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
Jun 10 Javascript
微信小程序自定义头部导航栏(组件化)
Nov 15 Javascript
Bootstrap Table使用整理(四)之工具栏
Jun 09 #Javascript
JavaScript设计模式之策略模式详解
Jun 09 #Javascript
Bootstrap Table使用整理(三)
Jun 09 #Javascript
Bootstrap Table使用整理(二)
Jun 09 #Javascript
Bootstrap Table使用整理(一)
Jun 09 #Javascript
Bootstrap Table使用整理(五)之分页组合查询
Jun 09 #Javascript
JS实现简易的图片拖拽排序实例代码
Jun 09 #Javascript
You might like
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python实现简单点对点(p2p)聊天
2017/09/13 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
师范生自荐信范文
2013/10/06 职场文书
经典大学生求职信范文
2014/01/06 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
辞职信范文大全
2015/03/02 职场文书
微信搭讪开场白
2015/05/28 职场文书
大学运动会加油稿
2015/07/22 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server