我提到了在NodeJS express app中创建Singleton类的两种方法,请帮助我理解这些实现的一些内容:
(function (nameClass) {
nameClass.name = 'John';
nameClass.getName = function () {
return nameClass.name;
};
nameClass.setName = function (newName) {
nameClass.name = newName;
};
})(module.exports);
var fu = new function () {
this.name = "John";
this.getName = function () {
return this.name;
};
this.setName = function (newName) {
this.name = newName;
};
};
module.exports = fu;
答案 0 :(得分:2)
Singleton是只有一个实例的类。 Javascript没有类。当然,它们可以使用构造函数和原型轻松模拟,最重要的是可以模拟单例,但是为什么?您可以直接创建实例。
如果删除代码中没有任何意义的部分,则两种方法都将相同:
exports.name = "John";
exports.getName = function () {
return this.name;
};
exports.setName = function (newName) {
this.name = newName;
};
您还可以name
“私有”:
var name = "John";
exports.getName = function () {
return name;
};
exports.setName = function (newName) {
name = newName;
};
这是node.js中最好的“单身人士”。
答案 1 :(得分:-2)
我更喜欢第二种方法,但我认为单例类是一种糟糕的设计模式 - 很难进行单元测试。
值得注意的是,nodejs模块本身就是单例(因为它们在需要时被缓存) - https://gist.github.com/vodolaz095/6201232