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+xml自动生成表格的东西
Dec 21 Javascript
javascript 多级checkbox选择效果
Aug 20 Javascript
多引号嵌套的变量命名的问题
May 09 Javascript
js结合正则实现国内手机号段校验
Jun 19 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
js实现倒计时效果(小于10补零)
Mar 08 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 Javascript
微信小程序模板template简单用法示例
Dec 04 Javascript
JS前端基于canvas给图片添加水印
Nov 11 Javascript
vue实现移动端div拖动效果
Mar 03 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
基于MySQL体系结构的分析
2013/05/02 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
input的focus方法使用
2010/03/13 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
Vue.js组件通信的几种姿势
2017/10/23 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
分享Python文本生成二维码实例
2016/01/06 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
Django choices下拉列表绑定实例
2020/03/13 Python
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
研究生导师推荐信
2015/03/25 职场文书
地道战观后感2000字
2015/06/04 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
利用python做表格数据处理
2021/04/13 Python
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers