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 相关文章推荐
使用jQuery模板来展现json数据的代码
Oct 22 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
Aug 04 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
jquery插件uploadify多图上传功能实现代码
Aug 12 Javascript
详谈js的变量提升以及使用方法
Oct 06 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
详解vue-router导航守卫
Jan 19 Javascript
vue 微信扫码登录(自定义样式)
Jan 06 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
Mar 02 Javascript
React实现轮播效果
Aug 25 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
AM/FM收音机的安装与调试
2021/03/02 无线电
php执行sql语句的写法
2009/03/10 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
php判断目录存在的简单方法
2019/09/26 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
python中sets模块的用法实例
2014/09/30 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Flask之flask-session的具体使用
2018/07/26 Python
python简单操作excle的方法
2018/09/12 Python
在python 中实现运行多条shell命令
2019/01/07 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
python字典key不能是可以是啥类型
2020/08/04 Python
请说出你所知道的线程同步的方法
2013/04/19 面试题
公司离职证明范本
2014/01/13 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
美术学专业求职信
2014/07/23 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
办公室文员岗位职责
2015/02/04 职场文书
小学生读书笔记范文
2015/06/30 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL