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 相关文章推荐
asp.net HttpHandler实现图片防盗链
Nov 09 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
AngularJS入门教程之Cookies读写操作示例
Nov 02 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
Layui数据表格之获取表格中所有的数据方法
Aug 20 Javascript
vue cli3 配置proxy代理无效的解决
Oct 30 Javascript
Vue关于组件化开发知识点详解
May 13 Javascript
部署vue+Springboot前后端分离项目的步骤实现
May 31 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 Javascript
微信小程序 根据不同用户切换不同TabBar
Apr 21 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
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
JavaScript高级程序设计
2006/12/29 Javascript
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
js闭包的用途详解
2014/11/09 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
python代码制作configure文件示例
2014/07/28 Python
Python使用wxPython实现计算器
2018/01/30 Python
Python如何实现转换URL详解
2019/07/02 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
pymysql 开启调试模式的实现
2019/09/24 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
合作投资意向书
2014/04/01 职场文书
企业新年寄语
2014/04/04 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
MySQL 语句执行顺序举例解析
2022/06/05 MySQL