2010-01-28 7 views
6

इस स्थिति पर विचार करें: मुझे एक एक्वैरियम सिम्युलेटर मिला है जहां मेरे पास 5 अलग-अलग प्रकार की मछलियों हैं। विभिन्न प्रकारों का अर्थ अलग-अलग गुण (गति, रंग, भूख, आदि) है। क्या होगा यदि मैं अपने सिम्युलेटर के उपयोगकर्ता को एक नई प्रकार की मछली बनाने में सक्षम होना चाहता हूं और इसे अपने गुणों के लिए मान देता हूं?उपयोगकर्ताओं द्वारा बनाई गई नई कक्षाएं?

प्रोग्रामर द्वारा इसे कैसे कार्यान्वित किया जाता है? क्या मुझे किसी प्रकार की "इवेंट हैंडलिंग" की आवश्यकता है जो मेरी "मछली" कक्षा में कोड की रेखाओं का एक विशिष्ट समूह जोड़ देगा? क्या यह भी एक वैध विचार है?

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

संपादित करें: हाँ, मेरा बुरा है कि मैंने बातचीत के तरीके का उल्लेख नहीं किया: एक जीयूआई।

तो, "नई प्रजातियां जोड़ें" नामक एक टैब की कल्पना करें जिसमें मछलियों (प्रकार, गति, रंग इत्यादि) के प्रत्येक गुण के लिए एक फ़ील्ड है। इसलिए, उपयोगकर्ता उपयुक्त मूल्यों के साथ फ़ील्ड में भर जाता है और जब वह "add" पर क्लिक करता है तो कन्स्ट्रक्टर कहा जाता है। कम से कम इस तरह मैं कल्पना करता हूँ। :)

+0

दिलचस्प। कार्रवाई में जावा मेटाक्लास। –

उत्तर

0

type object pattern पर एक नज़र डालें। इसके लिए भी Google मैंने पहले संदर्भों में से एक दिया है ...

आप Reflection pattern भी देख सकते हैं ...

+0

आलेख जिसने इसे पूरी तरह से स्पष्ट किया है यह यह है: http://gameprogrammingpatterns.com/type-object.html धन्यवाद, सामान्य रूप से महान पैटर्न और विशिष्ट रूप से स्थान पर! –

1

मैं सिर्फ एक नक्शा का प्रयोग करेंगे:

class Fish 
{ 
    Map<String,String> attributes = new HashMap<String,String>(); 
    setBusterFish() 
    { 
    attributes.put("speed", "5"); 
    attributes.put("colour", "red"); 
    attributes.put("hunger", "10"); 
    attributes.put("name", "buster"); 
    } 
} 
1

जावा एक OO भाषा है, और यह वर्गों और वस्तुओं में संबंधित है। आकर्षक, निष्पक्ष समाधान आपके कार्यक्रम को मछली के "वर्ग" के साथ सौदा करना होगा जैसे कि यह कुछ भी कक्षाओं से संबंधित है, यानी कुछ जावा कोड बनाने के लिए और संकलक और लोडर को इसे रनटाइम में पेश करने दें।

यह दृष्टिकोण कुछ अजीबता के साथ काम करने के लिए किया जा सकता है। अनिवार्य रूप से आपके "गतिशील जावा वर्ग" कोडिंग वास्तव में आपके असाइनमेंट की तुलना में बहुत बड़ा और जटिल हो जाएगा।

यदि आपको वास्तव में अलग-अलग विशेषताओं (केवल उन विशेषताओं के अलग-अलग मूल्यों) नहीं हैं, तो आप वास्तव में ऐसा करने की ज़रूरत है; और फिर भी सरल समाधान हैं।

क्या पूछा जा रहा है, मुझे लगता है कि आपको वास्तव में केवल Fish कक्षा की आवश्यकता है। जब उपयोगकर्ता एक नया परिभाषित करता है, तो वह वास्तव में क्या परिभाषित कर रहा है विशेषता मान हैं।

यदि आप वास्तव में नए और गतिशील विशेषताओं को चाहते हैं, तो आप उदाहरण का उपयोग करके एक लंबा रास्ता तय कर सकते हैं। नाम/मूल्य जोड़े स्टोर करने के लिए HashMap। आप उपयोगकर्ता को "legs"/"4" जोड़ सकते हैं और उसके बाद उस नई विशेषता को प्रिंट कर सकते हैं; लेकिन आप उन पैरों पर मछली नहीं चल सके क्योंकि आप नई विशेषता के साथ काम करने के लिए कोडिंग गायब हो जाएंगे।

+0

क्या होगा यदि वह एक नया परिभाषित करता है, तो पहले से मौजूद किसी अन्य प्रकार का एक और दो बनाता है, और फिर वह पहले बनाए गए नए प्रकार में से एक चाहता है? प्रत्येक नए प्रकार के "मानक" विशेषताओं को कहीं सेव किया जाना चाहिए ताकि उपयोगकर्ताओं को हर बार उन्हें सम्मिलित करने की आवश्यकता न हो। –

+0

वास्तव में, आप अपने उपयोगकर्ताओं को नई मछली में प्रवेश नहीं कर रहे हैं - आप उन्हें नए 'फिशप्रोटोटाइप' या 'फिशस्पीसी' या 'फिशमैटाडाटा' में प्रवेश करने के लिए प्राप्त कर रहे हैं। तो अगर आपके पास 'वर्ग मछली {निजी मछली प्रजाति प्रजातियां थीं; } 'और फिर प्रत्येक प्रविष्टि के लिए एक नई' फिशस्पीसी 'बनाएं; जब भी वे एक नया सैल्मन चाहते हैं तो आप आसानी से 'नई मछली (सैल्मनस्पीस सूचना) को कॉल कर सकते हैं। अन्य संभावनाओं में पिछले मछली की प्रतिलिपि बनाने के लिए 'originalFish.clone()' का उपयोग करना शामिल है, 'Fish.copyOf (originalFish) 'या' नई मछली (मूलफिश)' ... कई संभावित दृष्टिकोण हैं। – Cowan

0

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

यदि मैं आपका प्रश्न सही ढंग से समझता हूं, तो मेरा मानना ​​है कि इससे अधिक जटिल चीजें एक गलती है।