2013-09-05 4 views
14

जावा में एक सिंगलटन स्थिर चर या सदस्य चर का उपयोग करना चाहिए? क्या कोई फायदे हैं?क्या जावा सिंगलटन स्थिर चर का उपयोग करना चाहिए?

+0

देखें: http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern –

+0

आप कम से कम एक स्थिर चर का उपयोग किए बिना एक सिंगलटन का निर्माण करने में सक्षम होगा। – dasblinkenlight

+0

@dasblinkenlight हाँ, मुझे एक की आवश्यकता होगी, लेकिन सवाल उन सभी अन्य चरों के बारे में है जो सदस्य चर या स्थिर चर हो सकते हैं। – Andreas

उत्तर

11

आपको सदस्य चर का उपयोग करना चाहिए। एक सिंगलटन एक वस्तु है (यानी एक वर्ग का एक उदाहरण) और इसलिए इसे मॉडल किया जाना चाहिए; यहां तक ​​कि यदि आप कभी भी उनमें से एक बनाने का इरादा रखते हैं।

कक्षा स्तर के चर के लिए सांख्यिकी का उपयोग किया जाना चाहिए।

+0

सदस्य चर स्थिर चर के माता-पिता हैं http://www.programmerinterview.com/index.php/c-cplusplus/whats-the-difference-between-a-class-variable-and-an-instance-variable/ – SpringLearner

4

आप स्थैतिक चर का उपयोग कर से बचने और बजाय Enum उपयोग कर सकते हैं:

public enum MySingleton { 
    INSTANCE; 
} 

आप MySingleton.INSTANCE के रूप में इस सिंगलटन पहुँच सकते हैं।

एनम थ्रेड सुरक्षित है और एंटम के माध्यम से सिंगलटन के कार्यान्वयन से यह सुनिश्चित होता है कि आपके सिंगलटन में एक बहुप्रचारित वातावरण में भी एक उदाहरण होगा।

2

स्थिर चर या सदस्य चर का उपयोग करने के लिए कोई जनादेश नहीं है। चूंकि सिंगलटन के पास केवल एक उदाहरण होगा, इसलिए तार्किक रूप से, स्थैतिक या सदस्य चर का उपयोग करने से कोई फर्क नहीं पड़ता है। इसके अलावा, स्थिर और आवृत्ति परिवर्तनीय अंतर धारण करते हैं, स्थिर चर को कक्षा लोडिंग के दौरान प्रारंभ किया जाएगा, लेकिन उदाहरण चर के दौरान आवृत्ति चर प्रारंभ किए जाएंगे।

लेकिन एक सामान्य प्रोग्रामिंग नियम के रूप में, आपको यह तय करना चाहिए कि आपको स्थिर चर की आवश्यकता है या नहीं। सार्वजनिक स्थैतिक चर न बनाएं और अनावश्यक समस्याओं के साथ समाप्त न करें। तो मेरी व्यक्तिगत राय में, चीजों को सरल और नियंत्रण में रखने के लिए आवृत्ति चर को प्राथमिकता दी जानी चाहिए।

2

इसके स्थिर variables.You उपयोग करने के लिए उपयोग कर सकते हैं enum अनिवार्य नहीं भी

this

+0

चूंकि एक enum प्रति परिभाषा स्थिर है, यह सिर्फ दिखाता है कि यह स्थिर चर का उपयोग करता है। अन्यथा एक enum एक सिंगलटन – Xtroce

2

देखना यह ठोस चर पर निर्भर करता है। निश्चित रूप से सबसे आम उपयोग यह है कि सिंगलटन सामान्य वस्तु है जो सदस्य चर रखती है। उदाहरण के लिए, आप आसानी से एक ऑब्जेक्ट को दूसरे (अन्य सभी गुणों के साथ) से प्रतिस्थापित कर सकते हैं।

प्रत्येक वर्ग में स्थैतिक चर हो सकते हैं लेकिन यह व्हीलर को नहीं रोकता है यह सिंगलटन है या नहीं।

ऑब्जेक्ट के उदाहरण के साथ इसकी प्रकृति में सिंगलटन पैटर्न। सांख्यिकी कक्षाओं का मीटर है -> सिंगलटन पैटर्न के साथ कोई संबंध नहीं है।

1

बहुत सारी जानकारी पहले ही दी जा चुकी है: स्थैतिक चर या एक स्थिर चर का प्रयोग करें जो आपके उदाहरण को इंगित करता है या एक enum का उपयोग करें।

एक बड़ा अंतर यह है कि आपका एकल टन एक वर्ग का सदस्य है जो किसी अन्य वर्ग का उप-वर्ग है।

इसलिए आपका सिंगलटन उदाहरण सुपर क्लास से प्राप्त होता है।

इसका एक बड़ा फायदा हो सकता है।

Enums को एक-दूसरे को विस्तारित करने की अनुमति नहीं है, लेकिन आप एक enum का उपयोग कर सकते हैं जो इंटरफेस लागू करता है।

5

सिंगलटन इंस्टेंस के लिए एक स्थिर संदर्भ होना आवश्यक है, लेकिन उदाहरण के लिए नियमित कक्षा की तरह ही इंस्टेंस चर का उपयोग करना चाहिए।

कारण यह है कि सिंगलटन उदाहरण सभी ऑब्जेक्ट के बाद होता है, इसलिए सामान्य अच्छे डिज़ाइन सिद्धांत अभी भी अपनी कक्षा में लागू होते हैं।

इसके अलावा, आज यह एक सिंगलटन है, लेकिन कल यह एक ThreadLocal हो सकता है या नहीं उदाहरण के निर्माण प्रतिबंध के किसी भी प्रकार की है। कक्षा को सामान्य तरीके से डिजाइन किया गया है, तो इन वास्तुशिल्प विकल्पों के बीच परिवर्तन बहुत कम है। यदि आप स्थैतिक क्षेत्रों का उपयोग करते हैं, तो ऐसे परिवर्तनों को फ़ील्ड को गैर स्थैतिक बनाने के लिए अधिक रखरखाव कार्य की आवश्यकता होगी।

+0

के लिए एक अच्छा कार्यान्वयन क्यों आवृत्ति चर? – Andreas

+0

@Andreas संपादन के लिए संपादन क्यों देखते हैं – Bohemian

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