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 相关文章推荐
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
自动完成JS类(纯JS, Ajax模式)
Mar 12 Javascript
在表单提交前进行验证的几种方式整理
Jul 31 Javascript
js弹窗返回值详解(window.open方式)
Jan 11 Javascript
innerText 使用示例
Jan 23 Javascript
基于JQuery打造无缝滚动新闻步骤详解
Mar 31 Javascript
JS中substring与substr的用法
Nov 16 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
Feb 07 Javascript
详解react-webpack2-热模块替换[HMR]
Aug 03 Javascript
JavaScript变量类型以及变量作用域详解
Aug 14 Javascript
详解在vue-cli中使用路由
Sep 25 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php桌面中心(二) 数据库写入
2007/03/11 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
python排序方法实例分析
2015/04/30 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
python多进程实现文件下载传输功能
2018/07/28 Python
python简单贪吃蛇开发
2019/01/28 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
Python timeit模块的使用实践
2020/01/13 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
python 批量将中文名转换为拼音
2021/02/07 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
外科实习自我鉴定
2013/10/06 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
Springboot中如何自动转JSON输出
2022/06/16 Java/Android