मैं एक प्रोग्राम बना रहा हूं जो कुछ स्थिरांक का उपयोग करता है। सबसे पहले, हर बार जब मैं एक निरंतर उपयोग करने के लिए की जरूरत है, मैं इसे के रूप मेंसिंगलेट और स्थिरांक
//C#
private static readonly int MyConstant = xxx;
//Java
private static final int MyConstant = xxx;
कक्षा में जहां मैं इसे आवश्यकता होगी निर्धारित करेंगे। कुछ समय बाद, मुझे एहसास हुआ कि एक से अधिक वर्गों में कुछ स्थिरांक की आवश्यकता होगी।
- विभिन्न वर्गों है कि यह जरूरत में उन्हें परिभाषित करने के लिए:
इस समय, मैं 3 choises था। यह पुनरावृत्ति की ओर जाता है। अगर किसी कारण से मुझे उनमें से एक को बदलने की ज़रूरत है, तो मुझे हर जगह उन्हें बदलने के लिए सभी वर्गों में जांच करनी होगी।
- सभी स्थिरांकों के साथ एक स्थिर वर्ग/सिंगलटन को सार्वजनिक रूप से परिभाषित करने के लिए।
- यदि मुझे कक्षा, कक्षा बी और कक्षासी में निरंतर एक्स की आवश्यकता है, तो मैं इसे कक्षा में सार्वजनिक रूप से परिभाषित कर सकता हूं, और उसके बाद कक्षाबी और कक्षासी उन्हें संदर्भित कर सकती है। यह समाधान मेरे लिए अच्छा प्रतीत नहीं होता है क्योंकि यह कक्षाओं के बीच पहले से ही अधिक निर्भरताएं पेश करता है।
मैंने दूसरे विकल्प के साथ अपना कोड लागू करना समाप्त कर दिया। क्या यह सबसे अच्छा विकल्प है? मुझे लगता है कि शायद मुझे कुछ और बेहतर विकल्प याद आ रहा है।
यहां सिंगलटन का उपयोग करने के बारे में मुझे क्या चिंता है कि यह वर्ग के उपयोगकर्ता के लिए कहीं भी स्पष्ट नहीं है कि यह वर्ग सिंगलटन का उपयोग कर रहा है। हो सकता है कि मैं एक कॉन्स्टेंट क्लास बना सकूं जो सभी स्थिरांकों को जरूरी रखे और फिर मैं उन वर्गों के लिए निर्माता को पास कर दूंगा जिन्हें इसकी आवश्यकता होगी?
धन्यवाद
संपादित करें: मैं ज्यादातर जटिल प्रकार, नहीं ints और तार के लिए इस का उपयोग कर रहा हूँ। कम से कम सी # मामले में जो एक फर्क पड़ता है इसका मतलब है कि मैं const
कीवर्ड का उपयोग नहीं कर सकता।
यदि यह एक सिंगलटन में था, तो निश्चित रूप से उन्हें स्थैतिक घोषित नहीं किया जाएगा। यदि स्थिर वर्ग में या प्रत्येक वर्ग के अंदर रखे जाने की आवश्यकता होती है तो उन्हें स्थिर घोषित किया जाएगा। –
फिर वे मान वास्तव में ** स्थिरांक ** नहीं हैं। नहीं, सिंगलटन विचार भूल जाओ। – BalusC