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实现打开本地文件或文件夹
Mar 09 Javascript
js循环改变div颜色具体方法
Jun 25 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
javascript中加var和不加var的区别 你真的懂吗
Jan 06 Javascript
完善的jquery处理机制
Feb 21 Javascript
javascript中递归的两种写法
Jan 17 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
vue编译打包本地查看index文件的方法
Feb 23 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
Sep 21 Javascript
浅谈Vue.set实际上是什么
Oct 17 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 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 如何利用phpexcel导入数据库
2013/08/24 PHP
linux中cd命令使用详解
2015/01/08 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
python psutil库安装教程
2018/03/19 Python
python实现二维插值的三维显示
2018/12/17 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
python烟花效果的代码实例
2020/02/25 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
大学生关于奋斗的演讲稿
2014/01/09 职场文书
采购主管岗位职责
2014/02/01 职场文书
八一建军节感言
2014/02/28 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
初三英语教学计划
2015/01/23 职场文书
费城故事观后感
2015/06/10 职场文书