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 相关文章推荐
走出JavaScript初学困境—js初学
Dec 29 Javascript
在JS中最常看到切最容易迷惑的语法(转)
Oct 29 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 Javascript
JavaScript函数的4种调用方法详解
Apr 22 Javascript
jQuery使用animate创建动画用法实例
Aug 07 Javascript
JS简单模拟触发按钮点击功能的方法
Nov 30 Javascript
JS组件Bootstrap实现弹出框效果代码
Apr 26 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
浅谈在node.js进入文件目录的问题
May 13 Javascript
JavaScript事件发布/订阅模式原理与用法分析
Aug 21 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 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文件下载类
2006/12/06 PHP
php后台程序与Javascript的两种交互方式
2009/10/25 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
JS实现购物车特效
2017/02/02 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python实现简单的TCP代理服务器
2014/10/08 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
ipad上运行python的方法步骤
2019/10/12 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
办公室文书岗位职责
2013/12/16 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL