首页 > 代码库 > 【摘】JavaScript设计模式与开发实践--单例模式

【摘】JavaScript设计模式与开发实践--单例模式

本文章所有内容均摘自《Javascript设计模式与开发实践》一书(有兴趣的可以购买),加入了一点点自己的理解,写这篇文章的目的是,加强自身对设计模式的理解,以及对于没有接触过这一块的入门者的参考。

阅读本章内容,需要具备Javascript面向对象的知识,否则阅读起来可能会些许困难。

设计模式

  • 单例模式
  • 策略模式
  • 代理模式
  • 迭代器模式
  • 发布-订阅模式
  • 命令模式
  • 组合模式
  • 模板方法模式
  • 享元模式
  • 职责链模式
  • 中介者模式
  • 装饰者模式
  • 状态模式
  • 适配器模式

单例模式

单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器中的window对象。在Javascript开发中,单例模式的用途也非常广泛。

试想下,当我们点击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个浮窗都只会被创建一次,那么这个登录浮窗就适合用单例模式来创建。

实现单例模式

  要实现一个标准的单例模式并不复杂,无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。

    var Singleton = function(name){
        this.name = name;
    };
    Singleton.prototype.getName = function(){
        alert(this.name)
    };
    Singleton.getInstance =(function(){
        var instance = null;
        return function(name){
            if(!instance){
                instance = new Singleton(name);
            }
            return instance;
        }
    })() ;
    var a = Singleton.getInstance(‘tom‘);
    var b = Singleton.getInstance(‘jerry‘);
    console.log(a===b);//true

代码解释:

Singleton.getInstance 函数里面则是通过判断instance是否为空,如果为空的话,实例化Singleton类。这样可以保证这个类只会被实例化一次。

符合单例模式。

这种方式相对简单,但有一个问题,就是增加了这个类的"不透明性",Singleton类的使用者必须知道这是一个单例类,跟以往通过new XX的方式来获取对象不同,这里偏要使用Singleton.getInstance来获取对象。

实现透明的单例模式

 

【摘】JavaScript设计模式与开发实践--单例模式