单例模式也称作为单子模式,更多的也叫做单体模式。为软件设计中较为简单但是最为常用的一种设计模式。这篇文章主要介绍了 Javascript 实现单例模式的相关资料, 需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
单例模式也称作为单子模式,更多的也叫做单体模式。为软件设计中较为简单但是最为常用的一种设计模式。
单例模式的介绍:
在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有一个全局对象,才有利于协调系统整体的行为。比如在整个系统的配置文件中,配置数据有一个单例对象进行统一读取和修改,其他对象需要配置数据的时候也统一通过该单例对象来获取配置数据,这样就可以简化复杂环境下的配置管理。
单例模式的思路是:一个类能返回一个对象的引用(并且永远是同一个)和一个获得该实例的方法(静态方法,通常使用 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 单例模式的相关知识就给大介绍到这里,希望对大家有所帮助。
来源: http://www.phperz.com/article/17/0218/267433.html