मॉड्यूल पैटर्न को मूल रूप से पारंपरिक सॉफ्टवेयर इंजीनियरिंग में कक्षाओं के लिए निजी और सार्वजनिक इनकैप्सुलेशन दोनों प्रदान करने के तरीके के रूप में परिभाषित किया गया था।
मॉड्यूल पैटर्न के साथ काम करते समय, हम एक साधारण टेम्पलेट को परिभाषित करने के लिए उपयोगी हो सकते हैं जिसका उपयोग हम इसके साथ शुरू करने के लिए करते हैं। यहाँ एक है जो नाम-रिक्ति, सार्वजनिक और निजी चर शामिल करता है।
जावास्क्रिप्ट में, मॉड्यूल पैटर्न का उपयोग वर्गों की अवधारणा को इस तरह से आगे बढ़ाने के लिए किया जाता है कि हम एक ही वस्तु के अंदर सार्वजनिक / निजी दोनों तरीकों और चर को शामिल करने में सक्षम हैं, इस प्रकार वैश्विक दायरे से विशेष भागों को बचाते हैं। इस परिणाम के कारण पृष्ठ पर अतिरिक्त स्क्रिप्ट में परिभाषित अन्य फ़ंक्शन के साथ हमारे फ़ंक्शन नामों की संभावना में कमी होती है।
var myNamespace = (function () {
var myPrivateVar, myPrivateMethod;
// A private counter variable
myPrivateVar = 0;
// A private function which logs any arguments
myPrivateMethod = function( foo ) {
console.log( foo );
};
return {
// A public variable
myPublicVar: "foo",
// A public function utilizing privates
myPublicFunction: function( bar ) {
// Increment our private counter
myPrivateVar++;
// Call our private method using bar
myPrivateMethod( bar );
}
};
})();
लाभ
मॉड्यूल पैटर्न एक अच्छा विकल्प क्यों है? शुरुआत के लिए, यह डेवलपर्स के लिए बहुत साफ-सुथरा है जो ऑब्जेक्ट के उन्मुख पृष्ठभूमि से वास्तविक एनकैप्सुलेशन के विचार से आता है, कम से कम जावास्क्रिप्ट परिप्रेक्ष्य से।
दूसरे, यह निजी डेटा का समर्थन करता है - इसलिए, मॉड्यूल पैटर्न में, हमारे कोड के सार्वजनिक भाग निजी भागों को छूने में सक्षम हैं, हालांकि बाहरी दुनिया वर्ग के निजी भागों को छूने में असमर्थ है।
नुकसान
मॉड्यूल पैटर्न के नुकसान यह है कि जब हम सार्वजनिक और निजी दोनों सदस्यों को अलग-अलग तरीके से एक्सेस करते हैं, जब हम दृश्यता को बदलना चाहते हैं, तो हमें वास्तव में उस स्थान पर बदलाव करना होगा जहां सदस्य का उपयोग किया गया था।
हम उन निजी सदस्यों तक भी नहीं पहुँच सकते हैं, जो बाद के बिंदु पर ऑब्जेक्ट में जोड़े जाते हैं । उस ने कहा, कई मामलों में मॉड्यूल पैटर्न अभी भी काफी उपयोगी है और जब सही तरीके से उपयोग किया जाता है, तो निश्चित रूप से हमारे आवेदन की संरचना में सुधार करने की क्षमता है।
खुलासा मॉड्यूल पैटर्न
अब जब हम मॉड्यूल पैटर्न से थोड़ा अधिक परिचित हैं, तो आइए थोड़ा सुधार किए गए संस्करण पर एक नज़र डालते हैं - क्रिश्चियन हीलमैन के रिवीलिंग मॉड्यूल पैटर्न।
रिवाइलिंग मॉड्यूल पैटर्न के बारे में आया क्योंकि हेइल्मन इस तथ्य से निराश थे कि उन्हें मुख्य वस्तु का नाम दोहराना पड़ा जब हम एक सार्वजनिक विधि को दूसरे से या सार्वजनिक चर पर पहुँचना चाहते थे। उन्होंने भी स्विच करने के लिए मॉड्यूल पैटर्न की आवश्यकता को नापसंद किया उन चीज़ों के लिए शाब्दिक संकेतन पर ध्यान देना जो वह सार्वजनिक करना चाहते थे।
उनके प्रयासों का परिणाम एक अद्यतन पैटर्न था जहां हम बस अपने सभी कार्यों और चर को निजी दायरे में परिभाषित करेंगे और एक अनाम वस्तु को पॉइंटर्स के साथ निजी कार्यक्षमता में लौटाएंगे जिसे हम सार्वजनिक रूप से प्रकट करना चाहते थे।
रिवाइलिंग मॉड्यूल पैटर्न का उपयोग करने का एक उदाहरण नीचे पाया जा सकता है
var myRevealingModule = (function () {
var privateVar = "Ben Cherry",
publicVar = "Hey there!";
function privateFunction() {
console.log( "Name:" + privateVar );
}
function publicSetName( strName ) {
privateVar = strName;
}
function publicGetName() {
privateFunction();
}
// Reveal public pointers to
// private functions and properties
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
})();
myRevealingModule.setName( "Paul Kinlan" );
लाभ
यह पैटर्न हमारी लिपियों के सिंटैक्स को अधिक सुसंगत बनाने की अनुमति देता है। यह मॉड्यूल के अंत में और भी स्पष्ट करता है कि हमारे कौन से कार्य और चर सार्वजनिक रूप से एक्सेस किए जा सकते हैं जो पठनीयता को आसान बनाते हैं।
नुकसान
इस पैटर्न का एक नुकसान यह है कि यदि कोई निजी फ़ंक्शन किसी सार्वजनिक फ़ंक्शन को संदर्भित करता है, तो उस पैच को आवश्यक होने पर सार्वजनिक फ़ंक्शन को ओवरराइड नहीं किया जा सकता है। ऐसा इसलिए है क्योंकि निजी फ़ंक्शन निजी कार्यान्वयन को संदर्भित करता रहेगा और पैटर्न केवल सार्वजनिक कार्यों पर लागू नहीं होता है।
सार्वजनिक ऑब्जेक्ट सदस्य जो निजी चर का उल्लेख करते हैं, वे भी बिना पैच नियम नोट के अधीन हैं।