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 相关文章推荐
jQuery 源码分析笔记(7) Queue
Jun 19 Javascript
javaScript 利用闭包模拟对象的私有属性
Dec 29 Javascript
模拟多级复选框效果的jquery代码
Aug 13 Javascript
浅析JavaScript中的常用算法与函数
Nov 21 Javascript
浅谈JavaScript的内置对象和浏览器对象
Jun 03 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
解析微信JS-SDK配置授权,实现分享接口
Dec 09 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
vue.js删除动态绑定的radio的指定项
Jun 02 Javascript
深入理解Vue的数据响应式
May 15 Vue.js
原生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 cron中的批处理
2008/09/16 PHP
php实现的日历程序
2015/06/18 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
javascript中的array数组使用技巧
2010/01/31 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python实现图像识别功能
2018/01/29 Python
python获取txt文件词向量过程详解
2019/07/05 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
班组建设经验交流材料
2014/05/12 职场文书
护理目标管理责任书
2014/07/25 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
2014年市场部工作总结
2014/11/25 职场文书
初中作文评语集锦
2014/12/25 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python