代码之家  ›  专栏  ›  技术社区  ›  José Salgado vittore

如何使用类在javascript中实现单例设计模式?

  •  -1
  • José Salgado vittore  · 技术社区  · 6 年前

    我在javascript中看到了一些如何使用iife实现单例设计模式的例子,但我想知道如何使用类实现它?

    3 回复  |  直到 6 年前
        1
  •  0
  •   quirimmo    6 年前

    class Ex {
      static getInstance() {
        if (Ex.instance === null) {
          Ex.instance = new Ex();
        }
        return Ex.instance;
      }
    }
    Ex.instance = null;
    
    const ex = Ex.getInstance();
    console.log(ex);
        2
  •  0
  •   Davi    6 年前

    虽然你能做到,但没有必要使用 class 为了它。大多数时候你可以用普通的 Object 像对待单身汉一样对待它:

    export const MySingleton = {
      init(...args) { /*  */ },
      method(...args) { /* do whatever you want */ }
    }
    

    然后,例如:

    import {MySingleton} from './path/to/mysingleton';
    
    MySingleton.init(1, 2, 3);
    MySingleton.method();
    

    如果你想 流利的 api,要么返回 this MySingleton 对象:

    export const MySingleton = {
      init(...args) {
        /* do some stuff */
        return MySingleton;
      },
      ...
    }
    

    结果:

    import {MySingleton} from './path/to/mysingleton';
    
    MySingleton.init(1, 2, 3).method();
    
        3
  •  0
  •   Nicolas    6 年前

    javascript中没有类:

    在ecmascript 2015中引入的javascript类主要是javascript现有的基于原型的继承的语法糖。类语法没有向javascript引入新的面向对象继承模型。

    重点是,在javascript中不可能定义公共或私有方法,而singleton模式是基于使用私有构造函数和公共访问器进行封装的。