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 相关文章推荐
javascript通过元素id和name直接取得元素的方法
Apr 28 Javascript
Javascript中Array用法实例分析
Jun 13 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
Feb 17 Javascript
vue-router:嵌套路由的使用方法
Feb 21 Javascript
基于vue的换肤功能的示例代码
Oct 10 Javascript
javascript字体颜色控件的开发 JS实现字体控制
Nov 27 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
Feb 03 Javascript
angularJS自定义directive之带参方法传递详解
Oct 09 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
Oct 18 Javascript
JavaScript定时器常见用法实例分析
Nov 15 Javascript
在VUE中使用lodash的debounce和throttle操作
Nov 09 Javascript
React列表栏及购物车组件使用详解
Jun 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
一个SQL管理员的web接口
2006/10/09 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
Javascript !!的作用
2008/12/04 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
python虚拟环境完美部署教程
2019/08/06 Python
python中字典增加和删除使用方法
2020/09/30 Python
Python __slots__的使用方法
2020/11/15 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
支教自我鉴定
2014/01/18 职场文书
驾驶员岗位职责
2014/01/29 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
学期个人自我总结
2015/02/13 职场文书
城南旧事观后感
2015/06/11 职场文书
财产分割协议书
2016/03/22 职场文书
Python中字符串对象语法分享
2022/02/24 Python