आपको निश्चित रूप से अधिकांश मामलों में एक नई वस्तु बनाना पसंद करना चाहिए । सभी गुणों को पुन: पेश करने में समस्याएं:
- सभी संपत्तियों पर सार्वजनिक निपटान की आवश्यकता होती है, जो आपके द्वारा प्रदान किए जाने वाले एनकैप्सुलेशन के स्तर को काफी सीमित कर सकता है
- यह जानना कि क्या आपके पास पुराने उदाहरण के लिए कोई अतिरिक्त उपयोग है या नहीं, इसका मतलब है कि आपको हर जगह यह जानना होगा कि पुराने उदाहरण का उपयोग किया जा रहा है। इसलिए यदि वर्ग
A
और वर्ग B
दोनों ही वर्ग के उत्तीर्ण उदाहरण हैंC
तो उन्हें यह जानना होगा कि क्या वे कभी भी एक ही उदाहरण से उत्तीर्ण होंगे, और यदि ऐसा है तो क्या दूसरा अभी भी इसका उपयोग कर रहा है। यह कसकर जोड़े वर्गों जो अन्यथा होने का कोई कारण नहीं है।
- बार-बार कोड की ओर जाता है- जैसा कि gbjbaanb ने संकेत दिया है, यदि आप कंस्ट्रक्टर में एक पैरामीटर जोड़ते हैं, तो हर जगह जो कॉल करता है कि कंस्ट्रक्टर संकलित करने में विफल हो जाएगा, स्पॉट के लापता होने का कोई खतरा नहीं है। यदि आप केवल एक सार्वजनिक संपत्ति जोड़ते हैं, तो आपको हर उस जगह को मैन्युअल रूप से ढूंढना और अद्यतन करना होगा जहां ऑब्जेक्ट "रीसेट" हैं।
- जटिलता बढ़ाता है। कल्पना कीजिए कि आप लूप में कक्षा का एक उदाहरण बना रहे हैं और उसका उपयोग कर रहे हैं। यदि आप अपनी विधि का उपयोग करते हैं, तो आपको अब लूप के माध्यम से या लूप शुरू होने से पहले अलग-अलग इनिशियलाइज़ेशन करना होगा। किसी भी तरह से अतिरिक्त कोड है जिसे आपको प्रारंभ करने के इन दो तरीकों का समर्थन करने के लिए लिखना होगा।
- इसका मतलब है कि आपकी कक्षा खुद को अमान्य स्थिति में होने से नहीं बचा सकती। कल्पना कीजिए कि आपने
Fraction
एक अंश और हर के साथ एक वर्ग लिखा था, और यह लागू करना चाहता था कि यह हमेशा कम हो गया (यानी अंश और भाजक का एलसीडी 1 था)। यह अच्छी तरह से करना असंभव है यदि आप लोगों को अंश और भाजक को सार्वजनिक रूप से सेट करने की अनुमति देना चाहते हैं, क्योंकि वे एक वैध राज्य से दूसरे को प्राप्त करने के लिए अमान्य राज्य के माध्यम से संक्रमण कर सकते हैं। उदा 1/2 (वैध) -> 2/2 (अमान्य) -> 2/3 (वैध)।
- जिस भाषा में आप काम कर रहे हैं, उसके लिए बिल्कुल भी मुहावरेदार नहीं है, कोड को बनाए रखने वाले किसी व्यक्ति के लिए संज्ञानात्मक घर्षण बढ़ाना।
ये सभी बहुत महत्वपूर्ण समस्याएं हैं। और आपके द्वारा बनाए गए अतिरिक्त काम के बदले में आपको क्या मिलता है ... कुछ भी नहीं। वस्तुओं के उदाहरणों को बनाना, सामान्य रूप से, अविश्वसनीय रूप से सस्ता है, इसलिए प्रदर्शन लाभ लगभग हमेशा पूरी तरह से नगण्य होगा।
जैसा कि अन्य उत्तर में उल्लेख किया गया है, केवल समय प्रदर्शन एक प्रासंगिक चिंता का विषय हो सकता है यदि आपकी कक्षा निर्माण पर कुछ महंगे काम करती है। लेकिन उस मामले में भी, इस तकनीक को काम करने के लिए आपको अपने द्वारा रीसेट किए जा रहे गुणों से महंगे हिस्से को अलग करने की आवश्यकता होगी, इसलिए आप इसके बजाय फ्लाईवेट पैटर्न या इसी तरह का उपयोग करने में सक्षम होंगे ।
एक तरफ ध्यान दें के रूप में, कुछ ऊपर समस्याओं की setters का उपयोग नहीं है और इसके बजाय एक होने से कुछ हद तक कम किया जा सकताpublic Reset
है, जिसमें निर्माता के रूप में ही पैरामीटर लेता है अपनी कक्षा पर विधि। यदि किसी कारण से आप इस रीसेट मार्ग से नीचे जाना चाहते हैं, तो संभवतः यह करने का एक बेहतर तरीका होगा।
फिर भी, अतिरिक्त जटिलता और दोहराव, जो ऊपर दिए गए बिंदुओं के साथ जोड़ता है, यह अभी भी इसे करने के खिलाफ एक बहुत ही प्रेरक तर्क नहीं है, खासकर जब बिना किसी लाभ के खिलाफ तौला जाता है।