关于javascript中的单例模式有很多问题。我发现的所有答案都建议:
IIFE,该工厂生产隐藏在封闭中的工厂。然后使用该工厂,我们可以调用getInstance()
避免依赖require
(和node.js模块)作为获得单例的方式。
,但是我们必须将该工厂存储在某个地方,以便其他模块可以访问它。它不能存储在任何随机模块中,因为那样我们就依赖于require
。在这种情况下,似乎拥有安全单身人士的唯一方法是:
其中一个比另一个好吗?还有其他方法吗?
答案 0 :(得分:0)
Node.js已经提供了一种产生单例的方法。 CommonJS模块(其他JS模块也是如此)在首次导入时会评估一次,因此导出的对象保持单例状态。这是平台的自然行为,可以作为经验法则。
require
缓存改写可以覆盖Node.js模块的这种行为,例如decache
。一种可能的用途是测试。另一个用例是入侵第三方NPM模块,以使其不产生单例(如果这是理想的行为),否则需要将其分叉。
将工厂存储在全局变量中
通常不建议在模块化环境中使用全局变量。
让顶级脚本管理单例实例的创建(并将其传递给其他模块)
这是依赖项注入模式。可以在需要的地方使用它,但是如果应用程序不使用该模式的好处,则会增加开销。