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编写的第一人称射击游戏
Feb 25 Javascript
javascript iframe内的函数调用实现方法
Jul 19 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
Apr 15 Javascript
基于JQuery的一句代码实现表格的简单筛选
Jul 26 Javascript
JS俄罗斯方块,包含完整的设计理念
Dec 11 Javascript
javascript面向对象包装类Class封装类库剖析
Jan 24 Javascript
jquery 触发a链接点击事件解决方案
May 02 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
May 07 Javascript
JavaScript原生对象之String对象的属性和方法详解
Mar 13 Javascript
Vue.js框架路由使用方法实例详解
Aug 25 Javascript
微信小程序时间轴实现方法示例
Jan 14 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 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自动更新新闻DIY
2006/10/09 PHP
PHP 常见郁闷问题答解
2006/11/25 PHP
php中的实现trim函数代码
2007/03/19 PHP
也谈php网站在线人数统计
2008/04/09 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
Python学习笔记(二)基础语法
2014/06/06 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
Python画图学习入门教程
2016/07/01 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
竞职演讲稿范文
2014/01/11 职场文书
5.1手机促销活动
2014/01/17 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
2015年市场部工作总结
2015/04/30 职场文书
闪闪红星观后感
2015/06/08 职场文书
退货证明模板
2015/06/23 职场文书
校园之声广播稿
2015/08/18 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技