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



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

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);

虽然你可以这样做,但没有必要使用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,只需返回thisMySingleton对象:

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

结果:

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

javascript 中没有类:

在 ECMAScript 2015 中引入的 JavaScript 类主要是语法糖,而不是 JavaScript 现有的基于原型的继承。类语法不会向 JavaScript 引入新的面向对象的继承模型。

关键是不可能在JavaScript中定义公共或私有方法,而Singleton模式基于私有构造函数和公共访问器的封装。

最新更新