javascript - 单例比 TypeScript 中的模块有优势吗?

标签 javascript typescript design-patterns

我已经使用 node/JavaScript 几年了,现在刚刚熟悉 TypeScript。我试图在 TypeScript 中何时使用类以及何时使用模块。

在 JavaScript 中,我经常会创建这样的模块:

const name = "batman";

function getName() {
  return name;
}

module.exports = {
  name
};

在 TypeScript 中,同样的代码可以写成:

const name: string = "batman";

export function getName(): string {
  return name;
}

然而,在网上阅读,TypeScript 中有相当多的单例示例。我也可以把这段代码写成这样的单例类:

export default class Singleton {
    private static instance: Singleton;
    private name: string = "batman";

    private constructor() { }

    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }

        return Singleton.instance;
    }

    public getName() {
        return this.name;
    }
}

我很难理解为什么我会创建一个单例,因为该模块的代码更少并且可以说更简单。它也仅作为单个实例存在。单例有什么好处吗?

最佳答案

是的,模块要简单得多,并且在许多情况下是更好的选择。但是,单例有两个优点:

  • 他们可以使用延迟初始化,在第一次使用时被实例化
  • 它们可以更容易地转换为普通 class ,如果需要多个实例。 (如果您的实例是有状态的 - 与您示例中的代码不同,这种情况实际上经常发生)。
  • 关于javascript - 单例比 TypeScript 中的模块有优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61623424/

    相关文章:

    javascript - 转义字符生成 "missing ) after argument list"错误?

    c++ - C++ 实例中的装饰器模式

    node.js - 所有连接在应用程序提供服务之前连接

    typescript - 如何将 tslint 与 npx 一起使用

    arrays - 如何在 Angular Typescript 中将数组作为表单数据发布

    javascript - 删除部分文本

    java - UML和代码关系

    javascript - ReactJS 当使用 HTML 属性被选中时,reactjs 不允许选择复选框

    javascript - 附加后无法克隆片段?

    javascript - 尝试使用 ng-repeat 时出现黑屏?