2011-04-07 11 views
11

कौन से कारक उपयुक्त डिजाइन पैटर्न का उपयोग करने के लिए प्रभावित करते हैं?सिंगलटन और स्टेटिक यूटिलिटी क्लासेस

स्पष्टीकरण:

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

+0

यह बहुत अस्पष्ट है ... –

+0

समेकित, हालांकि आप निकट भविष्य में अपने प्रश्नों के साथ थोड़ा अधिक वर्णनात्मक बनना चाहेंगे। :-) –

+0

मुझे लगता है कि स्टैक ओवरफ्लो लोग ऑफ-विषय पर विचार करते हैं। यदि आप अपने प्रश्न की प्रेरणा व्यक्त करते हैं और कुछ वास्तविक जीवन उदाहरण दिखाते हैं, तो शायद उत्तर अधिक केंद्रित हो सकते हैं। अन्यथा, यह शायद एक बहुत व्यापक और व्यक्तिपरक सवाल है। –

उत्तर

6

मैं साझा कार्यों के लिए स्थिर उपयोगिता कक्षाओं का उपयोग करता हूं जिन्हें कई अलग-अलग संदर्भों से बुलाया जाएगा - उदा। गणित java.util.Math में समान कार्यों के समान है। यह एक उचित पैटर्न है कि ये "शुद्ध" कार्य हैं (यानी किसी भी राज्य में हेरफेर नहीं करते हैं या उनके द्वारा दिए गए पैरामीटर के अलावा किसी अन्य डेटा तक पहुंच नहीं पाते हैं)।

मैं बहुत ही कम अकेले सिंगलेट का उपयोग करता हूं, और विशेष रूप से वैश्विक सिंगलेट से बचने की कोशिश करता हूं। वे वैश्विक चर से जुड़े सभी सामान्य समस्याओं से पीड़ित हैं। वे परीक्षण को कठिन बनाते हैं, और जब तक कि आपका सिंगलटन भी अपरिवर्तनीय न हो, वे वैश्विक स्थिति की समस्याओं का परिचय देते हैं। जब एक दृश्य तुम सिर्फ अगर (वस्तु == END_OF_SEQUENCE_MARKER) का परीक्षण कर सकते traversing

public static final END_OF_SEQUENCE_MARKER=new EndMarker(); 

तब: उदाहरण के लिए - मुख्य जगह मैं उन्हें उपयोगी पाया है प्रदर्शन हैक्स कि वस्तु पहचान पर निर्भर है। क्योंकि यह एक स्थिर अंतिम संदर्भ है, जेआईटी इसे एक बेहद तेज परीक्षण में बदल देगा ....

  • स्टेटिक कारखाने वर्गों आमतौर पर मतलब नहीं है:

    संपादित

    सिर्फ अपने स्पष्टीकरण, कुछ त्वरित अतिरिक्त टिप्पणियां देखने के बाद। फ़ैक्टरी क्लास का पूरा बिंदु यह है कि आप इसे चालू कर सकते हैं (या उप-वर्ग!), फ़ैक्टरी ऑब्जेक्ट पर कुछ कॉन्फ़िगरेशन परिवर्तन करें, फिर कॉन्फ़िगरेशन के अनुसार ऑब्जेक्ट इंस्टेंस उत्पन्न करने के लिए इसका उपयोग करें। यदि आप इसे स्थैतिक बनाने जा रहे हैं, तो आप पूरी स्थैतिक MyObjectFactory कक्षा होने के बजाय बस एक स्थिर MyObject.create (..) विधि बना सकते हैं ....

  • इसी प्रकार, एक अलग सिंगलटन प्रबंधक वर्ग क्यों है ? आमतौर पर सिंगलटन का प्रबंधन करने के लिए सबसे अच्छी कक्षा सिंगलटन कक्षा होती है, क्योंकि आपको आमतौर पर इसे एक निजी कन्स्ट्रक्टर तक पहुंचने की आवश्यकता होगी, मान लीजिए कि आप यह गारंटी देना चाहते हैं कि केवल एक ही उदाहरण बनाया जाएगा। बस एक साधारण स्थैतिक MySingleton.getInstance() विधि होने पर आमतौर पर आपको वह सब कुछ करना होगा जो आपको चाहिए।
13

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

स्टेटिक उपयोगिता का उपयोग तब किया जाता है जब आपके पास ऐसी कक्षा हो जो स्टेटलेस उपयोगिता कार्य है .. यह राज्य को बनाए रखता नहीं है। वस्तु का एक उदाहरण कभी भी तत्काल नहीं होता है।

+0

राज्य को बनाए रखने वाले वर्ग (क्या राज्य) का मतलब है? – Mercury

1

मुझे यकीन नहीं है कि सवाल क्या है।

सिंगलटन पैटर्न का उपयोग किया जाता है जहां उदाहरण में कहा गया है कि कई कॉलों में संरक्षित या परिवर्तित किया जा सकता है - यह एक कनेक्शन पूल या कुछ अन्य साझा वस्तु हो सकती है जो कक्षा तक पहुंच प्रदान करती है।

स्टेटिक यूटिलिटी क्लासेस का उपयोग किया जाता है जहां प्रत्येक व्यक्तिगत विधि स्टेटलेस होती है, और कक्षा के अन्य तरीकों पर इसका कोई असर नहीं पड़ता है।

2

आईएमओ स्थैतिक उपयोगिता कक्षाएं कॉलर और कक्षा के बीच एक ठोस अनुबंध को कम करती हैं। यह सिंगलेट्स से अलग है जिसमें आप अपने तथाकथित 'सिंगलटन' प्रदाता को getInstance पर कॉल करते समय हर बार एक नया उदाहरण देने के लिए दृश्यों के पीछे कार्यान्वयन को बदल सकते हैं।

तो हाँ, मूल रूप से स्थिर उपयोगिता विधियों का उपयोग करें जब आप निश्चित रूप से सुनिश्चित हों (उदाहरण के लिए Math) आपको कभी भी एक उदाहरण की आवश्यकता नहीं होगी और जब आप सोचते हैं कि एक ही उदाहरण समय के लिए पर्याप्त है लेकिन इसमें बदलाव हो सकता है भविष्य (उदाहरण के लिए कनेक्शन प्रदाता)।

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