【问题标题】:How to implement the singleton design pattern in JavaScript using classes?如何使用类在 JavaScript 中实现单例设计模式?
【发布时间】:2019-02-05 13:34:33
【问题描述】:

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

【问题讨论】:

    标签: javascript design-patterns singleton


    【解决方案1】:

    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】:

      虽然你可以做到,但没有必要使用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();
      

      如果您想要一个 fluent API,只需返回 thisMySingleton 对象:

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

      结果:

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

      【讨论】:

        【解决方案3】:

        javascript中没有类:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-31
          • 2014-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多