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 innerText和innerHtml应用
Jan 28 Javascript
Jquery index()方法 获取相应元素索引值
Oct 12 Javascript
使用js判断当前时区TimeZone是否是夏令时
Feb 23 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
angularjs实现搜索的关键字在正文中高亮出来
Jun 13 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
Aug 15 Javascript
React Native 搭建开发环境的方法步骤
Oct 30 Javascript
浅析java线程中断的办法
Jul 29 Javascript
vue安装遇到的5个报错及解决方法
Jun 12 Javascript
使用layer.msg 时间设置不起作用的解决方法
Sep 12 Javascript
Vue搭建后台系统需要注意的问题
Nov 08 Javascript
JavaScript链式调用原理与实现方法详解
May 16 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开源建站平台小结
2010/04/22 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
php数组指针操作详解
2017/02/14 PHP
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
Python获取网页上图片下载地址的方法
2015/03/11 Python
python根据出生日期返回年龄的方法
2015/03/26 Python
python分析网页上所有超链接的方法
2015/05/08 Python
python将list转为matrix的方法
2018/12/12 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
值得收藏的10道python 面试题
2019/04/15 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
Python实现京东抢秒杀功能
2021/01/25 Python
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
演讲稿格式
2014/04/30 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
人事主管岗位职责
2015/02/04 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
行政申诉状范文
2015/05/20 职场文书
校园广播站开场白
2015/06/01 职场文书
风之谷观后感
2015/06/11 职场文书
教师培训学习心得体会
2016/01/21 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python