2011-09-29 24 views
7

मैं वर्तमान में एक बड़ी परियोजना बना रहा हूं, और इस तरह मैं चाहता हूं कि सब कुछ बहुत अच्छी तरह से और जितना संभव हो उतना कुशल हो।जावा - ऑब्जेक्ट संदर्भ या पहचानकर्ता?

मेरी परियोजना में, मेरे पास टीम नामक एक कक्षा है, जिसमें टीम ऑब्जेक्ट्स का हैश मैप (इंटेगर, टीम) शामिल है। टीम के प्रत्येक उदाहरण में एक अद्वितीय आईडी (पूर्णांक) होता है।

प्लेयर नामक एक ऑब्जेक्ट भी है। प्लेयर के प्रत्येक उदाहरण को एक टीम को सौंपा जा सकता है (लेकिन हमेशा नहीं)।

अब, मुझे आश्चर्य है कि सबसे अच्छा तरीका पता है कि टीम एक खिलाड़ी को सौंपा गया है हो सकता है क्या:

-> स्टोर प्लेयर (निजी पूर्णांक टीम) में टीम की आईडी, इस आईडी तो करने के लिए प्रयोग किया जाता है टीमें में हैश मैप से टीम प्राप्त करें।

-> स्टोर प्लेयर (निजी टीम टीम)

किसी को भी पता है जो बेहतर है, और क्या सबसे महत्वपूर्ण समर्थक की, चोर की और खतरों प्रत्येक के हैं में टीम के लिए एक संदर्भ?

धन्यवाद!

+1

यह पूरी तरह से आपके उपयोगकेस पर निर्भर करता है। अलगाव में कक्षाओं को डिजाइन करने की बजाय, सुविधाओं के लंबवत स्लाइस के लिए प्रयास करें और डिज़ाइन करें। – leonm

उत्तर

6

निजी टीम टीम का उपयोग करें! अन्य वर्गों को किसी वस्तु के आईडी को जानने की आवश्यकता नहीं है जब तक कि कोई अच्छा कारण न हो। जावा में डेटाबेस संरचना को लागू न करें। जावा को ऑब्जेक्ट-आधारित होने के लिए डिज़ाइन किया गया है, इस तरह इसका उपयोग करें।

  1. हम मान सकते हैं कि अपने खिलाड़ी टीम वस्तु का उपयोग करने की आवश्यकता होगी:

    जानने के कुछ अतिरिक्त कारण आप टीम उदाहरण धारण करना चाहिए रहे हैं। एक लुकअप करने के बजाय उदाहरण होना बेहतर है।

  2. यदि आप उदाहरणों के बजाय आईडी पर हैं, तो किसी ऑब्जेक्ट को होने का कोई संदर्भ नहीं हो सकता है और यह कचरा एकत्र किया जा सकता है। मुझे पता है कि शायद आपके मामले में ऐसा नहीं होगा क्योंकि आप मानचित्र में सभी टीमों को पकड़ते हैं, लेकिन यह अभी भी एक जोखिम है और इसलिए इससे बचा जाना चाहिए।
+0

जानकारी के लिए धन्यवाद। मेरे पास सिर्फ एक और सवाल है: किसी ऑब्जेक्ट का संदर्भ कितना स्मृति लेता है? – Insdeath

+0

http://stackoverflow.com/questions/4474114/java-how-much-memory-a-reference- – stivlo

+0

बहुत धन्यवाद :) – Insdeath

-1

आप डेटाबेस का उपयोग कर रहे हैं? यदि ऐसा है, तो टीम में टीम की आईडी स्टोर करें, अन्यथा मैं सुझाव देता हूं कि आप टीम का संदर्भ संग्रहीत करें।

+0

-1 असहमत। सिर्फ इसलिए कि पृष्ठभूमि में डीबी है और तालिका आईडी का उपयोग कर रही है, वस्तु में किसी आईडी का उपयोग करने का कोई कारण नहीं है। बहुत सारे ओआरएम समाधान (हाइबरनेट) हैं जो इसे आसान बनाते हैं। –

+0

तो, मैंने पाया है कि मैंने पहले जो कहा वह इतना "सही" नहीं है, और, हाँ, यह निर्भर करता है ... –

0

स्पष्ट रूप से यहां कुछ संदर्भों के बारे में कहना असंभव है, जिसमें संदर्भ का उपयोग किए बिना - लेकिन कोड डिज़ाइन परिप्रेक्ष्य से, "प्राकृतिक" प्रत्याशा यह है कि एक टीम में खिलाड़ी होते हैं, इसलिए यह टीम है जो संदर्भित करेगी खिलाड़ी ऑब्जेक्ट्स, दूसरी तरफ नहीं।

यदि आप आईडी के साथ गड़बड़ करना शुरू करते हैं और बड़ी संख्या में विभिन्न वस्तुओं को स्टोर करने की आवश्यकता है, तो ऐसा लगता है कि आप डेटाबेस के बाद अधिक हैं, इस मामले में यदि आप बाहर निकलना नहीं चाहते हैं तो HSQLDB की तरह कुछ देखें जावा का

+0

मुझे लगता है कि इसे दो-तरफा कनेक्ट होने की आवश्यकता होगी। टीम खिलाड़ियों की एक सूची रखेगी और प्लेयर टीम को पकड़ेंगे। मैं आसानी से यह निर्धारित करना चाहता हूं कि एक टीम पर कितने खिलाड़ी हैं और कौन सी टीम एक खिलाड़ी चालू है। –

0

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

यदि कोई संदर्भ अभी भी संदर्भित है तो एक वस्तु कचरा नहीं होगी। यदि किसी मानचित्र में कुंजी के रूप में उपयोग किया जाता है, तो उस वस्तु का संदर्भ माना जाता है।

आप इस using WeakReference के आसपास मिल सकते हैं।

स्थिति में आप वर्णन करते हैं कि आपको शायद ऑब्जेक्ट्स को चाबियों के रूप में उपयोग करना चाहिए, लेकिन उपरोक्त स्थितियों से सावधान रहें।

+0

नहीं, मैं मानचित्र में एक कुंजी के रूप में संदर्भ का उपयोग नहीं करता - मैं केवल वस्तु की पहचान करने के लिए एक पूर्णांक का उपयोग करता हूं, इसलिए यह कोई समस्या नहीं होनी चाहिए। – Insdeath

+0

आह मैंने प्रश्न को गलत समझा ... टिप: हमेशा कोड उदाहरणों का उपयोग करें। ;-) –

0

private Team team आपके द्वारा उल्लेख किए गए दो दृष्टिकोणों के बीच जाने का तरीका है। यदि आप आईडी स्टोर करते हैं, तो क्या होगा यदि हैश मैप अपडेट किया गया हो? यह अनावश्यक निर्भरता बना रहा है।

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