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 相关文章推荐
百度 popup.js 完美修正版非常的不错 脚本之家推荐
Apr 17 Javascript
JS编程小常识很有用
Nov 26 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
浅析$(function) ready和onload 的区别
Sep 03 Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 Javascript
Vue实战之vue登录验证的实现代码
Oct 31 Javascript
Django+Vue跨域环境配置详解
Jul 06 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
Dec 24 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
Dec 04 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模板函数 正则实现代码
2012/10/15 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Python实现汇率转换操作
2020/05/03 Python
详解Python流程控制语句
2020/10/28 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
运动会通讯稿300字
2014/02/02 职场文书
远程研修随笔感言
2014/02/10 职场文书
离婚协议书范文
2015/01/26 职场文书
怒海潜将观后感
2015/06/11 职场文书
复活读书笔记
2015/06/29 职场文书
导游词之河北野三坡
2019/12/11 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server