नहीं, जब नोड का मॉड्यूल कैशिंग विफल हो जाता है, तो सिंगलटन पैटर्न विफल हो जाता है। मैंने 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());
यह आउटपुट को प्रत्याशित देता है:
{ '1': 'test', '2': 'test2' } { '1': 'test', '2': 'test2' }
लेकिन एक छोटा संशोधन कैशिंग को हरा देता है। 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());
या, लिनक्स पर:
% ln singleton.js singleton2.js
फिर sg2
आवश्यकता रेखा को इसमें बदलें :
var sg2 = require("./singleton2.js");
और बम , सिंगलटन को हराया गया है:
{ '1': 'test' } { '2': 'test2' }
मुझे इसके आसपास जाने का एक स्वीकार्य तरीका नहीं पता है। यदि आप वास्तव में कुछ सिंगलटन की तरह बनाने की आवश्यकता महसूस करते हैं और वैश्विक नाम स्थान (और कई समस्याएं जो परिणाम कर सकते हैं) को प्रदूषित करने के साथ ठीक हैं, तो आप लेखक के getInstance()
और exports
लाइनों को बदल सकते हैं :
singleton.getInstance = function(){
if(global.singleton_instance === undefined)
global.singleton_instance = new singleton();
return global.singleton_instance;
}
module.exports = singleton.getInstance();
उस ने कहा, मैं एक उत्पादन प्रणाली की स्थिति में कभी नहीं चला हूं, जहां मुझे ऐसा कुछ भी करने की आवश्यकता थी। मैंने जावास्क्रिप्ट में सिंगलटन पैटर्न का उपयोग करने की आवश्यकता भी महसूस नहीं की है।