2012-07-29 15 views
7

मैं जावा डिज़ाइन पैटर्न के माध्यम से जा रहा था और कुछ संदेह/प्रश्न प्रोटोटाइप डिज़ाइन पैटर्न प्राप्त कर रहा था। सबसे पहले मुझे बताएं कि मैंने क्या समझा है। प्रोटोटाइप डिज़ाइन पैटर्न का उपयोग वस्तुओं के निर्माण के लिए मेमोरी या संसाधनों के मामले में महंगा है। तो उस मामले में हम उस वस्तु के क्लोन का उपयोग करते हैं जो पहले से ही उपलब्ध है। तो नई वस्तु और क्लोन() बनाने के बीच क्या अंतर है? वस्तु स्मृति में कहां स्टोर करता है?जावा प्रोटोटाइप डिज़ाइन पैटर्न ऑब्जेक्ट सृजन

+0

यह आपके लिए उपयोगी हो सकता है http://stackoverflow.com/questions/663079/does-cloning-provide-a-performance-improvement-over-constructors-factory-methods –

उत्तर

3

प्रोटोटाइप डिज़ाइन पैटर्न दो प्रकार की बचत बचत और स्थान बचत की लागत प्रदान करता है।

किसी ऑब्जेक्ट को बनाते समय समय बचत परिस्थितियों में आती है सहायक जानकारी के लिए महंगी पहुंच की आवश्यकता होती है - कहें, फ़ाइल, डेटाबेस या नेटवर्क से कॉन्फ़िगरेशन डेटा का अनुरोध करना। उदाहरण के लिए, यदि आप वेब सर्वर पर संग्रहीत टेम्पलेट से बहुत सारे पेज बना रहे हैं, तो एक बार टेम्पलेट को पढ़ने के लिए सस्ता है और वेब सर्वर को अलग से पूछने के बजाय प्रत्येक नए पेज के लिए शुरुआती बिंदु प्राप्त करने के लिए इसे क्लोन करना सस्ता है प्रत्येक पृष्ठ।

मेमोरी बचत अपरिवर्तनीय वस्तुओं का पुन: उपयोग करने से आती है: यदि आपके मूल में बहुत सारे तार होते हैं, तो एक नया उदाहरण बनाने के लिए या तो पूरी तरह से नए अपरिवर्तनीय तार बनाना होगा, या स्ट्रिंग इंटर्निंग मैन्युअल रूप से सौदा करना होगा। प्रोटोटाइप पैटर्न का उपयोग क्लोन को टेम्पलेट के अपरिवर्तनीय हिस्सों को साझा करके इस समस्या से सावधानी से बचाता है।

4

जावा clone() विधि बस एक नई वस्तु बनाता है और इसमें सदस्य चर वैल्यू प्रतिलिपि बनाता है। आम तौर पर, यह एक नई वस्तु बनाने से न तो अधिक और न ही कम महंगा है। clone()new के साथ ऑब्जेक्ट बनाने से सस्ता हो सकता है जब किसी ऑब्जेक्ट के लिए कन्स्ट्रक्टर कुछ महंगा होता है: उदाहरण के लिए, अगर कन्स्ट्रक्टर ने तर्क लिया और डेटाबेस क्वेरी के हिस्से के रूप में उनका उपयोग किया तो क्या होगा? उस स्थिति में, clone() का उपयोग सस्ता होगा, क्योंकि महंगा क्वेरी ऑपरेशन नहीं होगा।

हालांकि इस डिजाइन पैटर्न का उपयोग करने के अन्य कारण हैं: ज्यादातर, जब वस्तुओं को उपयोग से पहले जटिल सेटअप की आवश्यकता होती है जिसे आसानी से कन्स्ट्रक्टर में नहीं किया जा सकता है। कल्पना कीजिए कि किसी ऑब्जेक्ट में 20 गुण थे जिन्हें सेट करने की आवश्यकता थी। यदि आप उन्हें कन्स्ट्रक्टर पैरामीटर के साथ सेट करते हैं, तो कन्स्ट्रक्टर बहुत बदसूरत होगा - 20 पैरामीटर के साथ एक कन्स्ट्रक्टर की कल्पना करें! इसके बजाए, आप किसी ऑब्जेक्ट को शायद कोई पैरामीटर नहीं बना सकते हैं, म्यूटेटर विधियों का उपयोग करके 20 मान सेट करें, फिर clone() ऑब्जेक्ट की आवश्यकता होने पर तैयार प्रतिलिपि बनाने के लिए ऑब्जेक्ट करें। clone() को कोई पैरामीटर बिल्कुल नहीं चाहिए, इसलिए यह स्पष्ट रूप से कम बदसूरत है। यदि आपको इस ऑब्जेक्ट के कई अलग-अलग संस्करणों की कई प्रतियों की आवश्यकता है, तो प्रोटोटाइप पैटर्न आकर्षक हो जाता है।

संबंधित मुद्दे