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来动态的修改url,实现对url的增删查改
Sep 01 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
javascript中setAttribute()函数使用方法及兼容性
Jul 19 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
深入理解MVC中的时间js格式化
May 19 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
May 27 Javascript
vue中mint-ui的使用方法
Apr 04 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
vue微信分享的实现(在当前页面分享其他页面)
Apr 16 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
JS寄快递地址智能解析的实现代码
Jul 16 Javascript
vue keep-alive的简单总结
Jan 25 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概率算法实例
2014/04/09 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
JavaScript 应用类库代码
2008/06/02 Javascript
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
Node.js 多线程完全指南总结
2019/03/27 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
如何理解委托
2012/01/06 面试题
旅游管理毕业生自荐信范文
2014/03/19 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
佛光寺导游词
2015/02/10 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS