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 相关文章推荐
js函数使用技巧之 setTimeout(function(){},0)
Feb 09 Javascript
编写高性能的JavaScript 脚本的加载与执行
Apr 19 Javascript
js内存泄露的几种情况详细探讨
May 31 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
js如何获取兄弟、父类等节点
Jan 06 Javascript
node.js中的url.format方法使用说明
Dec 10 Javascript
Javascript访问器属性实例分析
Dec 30 Javascript
JQuery用户名校验的具体实现
Mar 18 Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 Javascript
基于js中的原型(全面讲解)
Sep 19 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
Vue中使用clipboard实现复制功能
Sep 05 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 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
php单链表实现代码分享
2016/07/04 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
js分页代码分享
2014/04/28 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
python中列表和元组的区别
2017/12/18 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python语言快速上手学习方法
2018/12/14 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
什么是岗位职责
2013/11/12 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
成品仓管员工作职责
2013/12/29 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
2014年教学工作总结
2014/11/13 职场文书
2015年复活节活动总结
2015/02/27 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
涨价通知怎么写
2015/04/23 职场文书
单位同意报考证明
2015/06/17 职场文书
名人传读书笔记
2015/06/26 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL