[我正在一个大型项目中,我有多个经理来处理不同的任务,启动应用程序时,我只需要创建这些经理的一个对象,
我遇到过这种创建Singleton的方法
class QuestionnaireManager {
constructor() {
if (this.instance) {
return;
}
this.instance = this;
}
}
这是一种可接受的方法,有没有不利之处,我来自JAVA
Kotlin
背景,在其他语言的单例情况下,我们需要处理很多事情,这似乎很简单。 (大多数情况下必须处理多线程,但是由于JS是单线程的,所以我认为这是足够的方法)
仍然需要最佳实践方面的意见,或者甚至不依赖Singleton而是创建对象并通过依赖项注入在整个项目中重复使用的其他任何依赖项注入方法。
我想知道JS中sensie的意见。
class QuestionnaireManager {
constructor() {
if (QuestionnaireManager._instance) {
throw new Error("Singleton classes can't be instantiated more than once.")
}
QuestionnaireManager._instance = this;
// ... your rest of the constructor code goes after this
}
}
var managerOne = new QuestionnaireManager()
var managerTwo = new QuestionnaireManager() // Throws error
或者,如果您不希望在创建第二个实例时抛出错误,则可以只返回最后一个实例,如下所示:class QuestionnaireManager { constructor() { if (QuestionnaireManager._instance) { return QuestionnaireManager._instance } QuestionnaireManager._instance = this; // ... your rest of the constructor code goes after this } } var managerOne = new QuestionnaireManager() var managerTwo = new QuestionnaireManager() console.log(managerOne === managerTwo) // logs "true"
// questionnaire-manager.js
class QuestionnaireManager {
constructor() {
}
}
module.exports = new QuestionnaireManager()
然后,当您调用require('questionnaire-manager')
时,您将始终获得相同的实例。
this.instance
。可以通过QuestionnaireManager.instance
参考进行访问。但是...用Java语言实现经典的GOF单例的情况很少见...强制自己在vim中开发UI并觉得yoursefl是“真正的开发者”:)