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简单实现文件上传实例代码(无需插件)
Nov 15 Javascript
JS获取URL中的参数数据
Dec 05 Javascript
javascript实现回车键提交表单方法总结
Jan 10 Javascript
JavaScript使用yield模拟多线程的方法
Mar 19 Javascript
jquery图片倾斜层叠切换特效代码分享
Aug 27 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
Feb 18 Javascript
jquery实现列表上下移动功能
Feb 25 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 Javascript
Vuex之理解Mutations的用法实例
Apr 19 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 Javascript
Bootstrap FileInput实现图片上传功能
Jan 28 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
星际争霸秘籍
2020/03/04 星际争霸
《PHP边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
Jquery之美中不足小结
2011/02/16 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
用django设置session过期时间的方法解析
2019/08/05 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
计算机系本科生求职信
2014/05/31 职场文书
安全口号大全
2014/06/21 职场文书
学生安全责任书模板
2014/07/25 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
2014年护理部工作总结
2014/11/14 职场文书
城管年度个人总结
2015/02/28 职场文书
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python
Linux中如何安装并部署Redis
2022/04/18 Servers