gpt4 book ai didi

javascript - 如何使 Typescript 中的单例跨多个模块工作?

转载 作者:行者123 更新时间:2023-12-01 01:09:05 25 4
gpt4 key购买 nike

我正在使用的 typescript 应用程序中有一个数据库类,它设置为单例,如下所示:

export default class Database {
private static instance: Database;

//Actual class logic removed

public static getInstance(): Database {
if (!Database.instance) {
Database.instance = new Database();
Database.instance.logger.debug("Creating new Database Instance");
} else {
Database.instance.logger.debug("Using existing Database Instance");
}
return Database.instance;
}
}

当我使用 import databaseService from "../services/database.service"; 将模块导入另一个文件时,并使用 private database = databaseService.getInstance(); 获取实例 它按预期工作,并创建一个新实例。在同一文件中进一步尝试getInstance(),然后使用该现有对象。

但是,如果我随后在另一个文件中执行相同的操作,它将创建数据库对象的另一个新实例。这是一个禁忌,因为最终它会扰乱数据库逻辑的工作方式。

如何将单个对象设置为在整个应用程序中共享?最好不要将对象传递到各处,但如果必须如此,那就这样吧......

最佳答案

单例类是 JavaScript 中潜在的反模式,因为没有继承的类实例可以表示为普通对象。

在类构造函数中显式实现单例模式是 Node.js 和其他模块化环境中的反模式,因为模块已经提供了单例。

它可以是:

export class Database {}

export default new Database();

导出的类对于可扩展性可能很有用,但在 TypeScript 中,它对于键入来说是必需的,因为它充当接口(interface)。

关于javascript - 如何使 Typescript 中的单例跨多个模块工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55324510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com