我已经Controllers
为我的路由创建了一些类Node.js
,我希望它们能够在单例的基础上工作(不是必需的,它是额外的)
主控制器类
class RouteController {
static getInstance() {
if (!RouteController.singleton) {
RouteController.singleton = new RouteController();
}
return RouteController.singleton;
}
}
现在我想创建一个路由,例如查看帖子,我希望该类也具有单例模式,但不是 cop
PostController 类
class PostController extends RouteController {
}
如果我这样做并检查它console.log(RouteController.getInstance() === PostController.getInstance())
,true
当我希望每个(子)类都有自己的单例实例时它会返回。
我怎样才能正确地做到这一点?
一种简单的方法是查看您的singleton
属性是否是this
. 即使您RouteController.getInstance()
在对任何派生类执行此操作之前调用,这也将起作用。
class RouteController {
log() {
return 'Route';
}
static getInstance() {
if (!(this.singleton instanceof this)) {
// Only called twice so you can verify it's only initialized
// once for each class
console.log('Creating singleton...');
this.singleton = new this();
}
return this.singleton;
}
}
class PostController extends RouteController {
log() {
return 'Post';
}
}
console.log(RouteController.getInstance().log());
console.log(PostController.getInstance().log());
console.log(RouteController.getInstance().log());
console.log(PostController.getInstance().log());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句