Javascript实现单例模式


Posted in Javascript onJanuary 24, 2016

单例模式也称作为单子模式,更多的也叫做单体模式。为软件设计中较为简单但是最为常用的一种设计模式。

单例模式的介绍:

    在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有一个全局对象,才有利于协调系统整体的行为。比如在整个系统的配置文件中,配置数据有一个单例对象进行统一读取和修改,其他对象需要配置数据的时候也统一通过该单例对象来获取配置数据,这样就可以简化复杂环境下的配置管理。

    单例模式的思路是:一个类能返回一个对象的引用(并且永远是同一个)和一个获得该实例的方法(静态方法,通常使用 getInstance 名称)。那么当我们调用这个方法时,如果类持有的引用不为空就返回该引用,否者就创建该类的实例,并且将实例引用赋值给该类保持的那个引用再返回。同时将该类的构造函数定义为私有方法,避免其他函数使用该构造函数来实例化对象,只通过该类的静态方法来得到该类的唯一实例。

一般情况下,Javascript每次new一个对象就产生一个实例,实例指向不同的地址。就像如下:

(function(){
function Person(name){
this.name = name;
}
Person.prototype.work = function(){
console.log(this.name + " is working");
}
var p1 = new Person("Darren");
p1.work();
var p2 = new Person("Jack");
p2.work();
}());

以上,每次new出一个Person对象都是不同的。

如何在Javascript中实现单例模式呢?

--在生成某各对象时先判断是否存在。存在就不生成对象,不存在就生成对象。

(function(){
var PersonSingleton = (function(){
var instance;
function init(){
return {
name: 'Anonymous',
work: function(){
console.log(this.name + ' working');
}
};
}
return {
getInstance: function(){
if(!instantiated){
instantiated = init();
}
return instantiated;
}
}
})();
var p1 = PersonSingleton.getInstance();
p1.work();
var p2 = PersonSingleton.getInstance();
p2.work();
}());

以上,通过PsonSIngleton对象的getInstance方法得到的实例每次都是一样的。

关于javascript单例模式的相关知识就给大介绍到这里,希望对大家有所帮助。

Javascript 相关文章推荐
js setTimeout 常见问题小结
Aug 13 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
浅析Bootstrap组件之面板组件
May 04 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
May 07 Javascript
深入分析javascript中console命令
Aug 14 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
Nov 30 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
JavaScript 中使用 Generator的方法
Dec 29 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
Feb 26 Javascript
JavaScript判断日期时间差的实例代码
Mar 01 Javascript
node.js实现上传文件功能
Jul 15 Javascript
详解JS预解析原理
Jun 16 Javascript
原生JavaScript实现滚动条效果
Mar 24 #Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
Jan 23 #Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 #Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
Jan 23 #Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
Jan 23 #Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
Jan 23 #Javascript
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 #Javascript
You might like
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php adodb连接不同数据库
2009/03/19 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
python 实时遍历日志文件
2016/04/12 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Pytorch之保存读取模型实例
2019/12/30 Python
深入浅析python的第三方库pandas
2020/02/13 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
办公室副主任岗位职责
2013/11/25 职场文书
教研处工作方案
2014/05/26 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
作风整顿剖析材料
2014/09/30 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
加薪申请报告范本
2015/05/15 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python