Tidak. Saat cache modul Node gagal, pola tunggal itu gagal. Saya memodifikasi contoh untuk berjalan dengan penuh makna di OSX:
var sg = require("./singleton.js");
var sg2 = require("./singleton.js");
sg.add(1, "test");
sg2.add(2, "test2");
console.log(sg.getSocketList(), sg2.getSocketList());
Ini memberikan keluaran yang diantisipasi oleh penulis:
{ '1': 'test', '2': 'test2' } { '1': 'test', '2': 'test2' }
Tetapi modifikasi kecil mengalahkan caching. Di OSX, lakukan ini:
var sg = require("./singleton.js");
var sg2 = require("./SINGLETON.js");
sg.add(1, "test");
sg2.add(2, "test2");
console.log(sg.getSocketList(), sg2.getSocketList());
Atau, di Linux:
% ln singleton.js singleton2.js
Kemudian ubah sg2
baris yang diminta menjadi:
var sg2 = require("./singleton2.js");
Dan bam , singleton dikalahkan:
{ '1': 'test' } { '2': 'test2' }
Saya tidak tahu cara yang dapat diterima untuk menyiasati ini. Jika Anda benar-benar merasa perlu untuk membuat sesuatu seperti tunggal dan tidak keberatan mencemari namespace global (dan banyak masalah yang dapat terjadi), Anda dapat mengubah penulis getInstance()
dan exports
baris menjadi:
singleton.getInstance = function(){
if(global.singleton_instance === undefined)
global.singleton_instance = new singleton();
return global.singleton_instance;
}
module.exports = singleton.getInstance();
Meski begitu, saya tidak pernah mengalami situasi di sistem produksi di mana saya perlu melakukan hal seperti ini. Saya juga tidak pernah merasa perlu menggunakan pola tunggal di Javascript.