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在IE中“意外地调用了方法或属性访问”
Nov 19 Javascript
javascript IFrame 强制刷新代码
Jul 23 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
使用Java实现简单的server/client回显功能的方法介绍
May 03 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
$(document).ready(function() {})不执行初始化脚本
Jun 19 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
javaScript嗅探执行神器-sniffer.js
Feb 14 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
Mar 26 Javascript
微信小程序自定义联系人弹窗
May 26 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中常用数组处理方法实例分析
2008/08/30 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python基于phantomjs实现导入图片
2016/05/13 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
wxPython实现分隔窗口
2019/11/19 Python
python脚本定时发送邮件
2020/12/22 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
十岁生日父母答谢词
2014/01/18 职场文书
三下乡活动方案
2014/01/31 职场文书
企业晚会策划方案
2014/05/29 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
Consul在linux环境的集群部署
2022/04/08 Servers
python 使用pandas读取csv文件的方法
2022/12/24 Python