2010-01-27 20 views
5

मैं एक यूनी प्रोजेक्ट के लिए एक पिनबॉल गेम डिज़ाइन कर रहा हूं जिसमें 2 मोड होने चाहिए: चलने वाला मोड और बिल्डर मोड, जिससे कोई मशीन के लेआउट को डिज़ाइन/डिज़ाइन कर सकता है।राज्य पैटर्न का उपयोग करने या उपयोग करने के लिए?

मेरे प्रारंभिक सोचा राज्य पैटर्न था - हालांकि, मैं चिंतित हूं कि राज्यों के बीच आम इंटरफेस उन्हें तरीकों जो कि राज्य के लिए उपयुक्त नहीं हैं को लागू करने में अनुबंध हो सकता है कर रहा हूँ।

ईजी। बिल्डर मोड में यह बम्पर या जो भी हो, की स्थिति निर्धारित करने के लिए पूरी तरह उपयुक्त होगा; लेकिन चलने वाले मोड में इसे कुछ भी करने या अपवाद फेंकने के रूप में लागू किया जाएगा - जो कि बहुत बुरा लगता है, खासकर यदि ऐसी कई विधियां हैं।

क्या इसके लिए कोई बेहतर डिज़ाइन है?

+2

क्या आपको पैटर्न का उपयोग करने की आवश्यकता है? दो राज्य इसे उचित नहीं ठहराते हैं। – ChaosPandion

+0

बिलकुल नहीं, लेकिन अत्यधिक decoupled अधिक अंक प्राप्त होता है – Robert

+0

मैं 3 राज्यों के बारे में सोच रहा था, क्योंकि यह अच्छा हो सकता है, एक गेम चल रहा है, जबकि बिल्डर मोड पर स्विच न करें ... – Robert

उत्तर

11

आपकी अंतर्ज्ञान सही है। राज्य पैटर्न उपयोगी होता है जब एक कार्यक्रम में कई अलग-अलग राज्य हो सकते हैं, प्रत्येक एक ही ऑपरेशन का समर्थन करता है। उदाहरण के लिए एक ड्राइंग प्रोग्राम में कई अलग-अलग टूल्स हो सकते हैं, लेकिन प्रत्येक व्यक्ति समान ऑपरेशन का समर्थन करता है जैसे कलम को ऊपर या ऊपर रखना, और 2 बिंदुओं के बीच एक रेखा खींचना।

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

1

कुछ साल पहले मेरे पास विश्वविद्यालय में एक समान असाइनमेंट था।

मैं राज्य पद्धति का उपयोग कर इस बात के लिए overkill है कह सकते हैं कि, साथ ही जैसा कि पहले उल्लेख के रूप में नहीं है, पूरी तरह से अनुकूल होने के रूप में। क्या हम इस काम के साथ किया था: ऊपर

  • कुछ उपयोग अलग प्रकार, उन दोनों के बीच स्विच कर देती हैं।
  • प्रत्येक मोड को अन्य मोड का कोई ज्ञान नहीं है, वे एक-दूसरे में कॉल नहीं करते हैं।
  • हालांकि वे मॉडल के बारे में ज्ञान साझा करते हैं (जो आपके मामले में पिनबॉल बोर्ड होगा, बंपर्स, गेंदों आदि की स्थिति के साथ), इसलिए जब आप उनके बीच स्विच करते हैं तो वे लगातार होते हैं।
  • जीयूआई के संदर्भ में, प्रत्येक मोड को मूल रूप से यह करने के लिए स्थान दिया जाता है। जैसा कि आप कहते हैं, प्रत्येक मोड में अलग-अलग संभावित कार्य होते हैं, इसलिए उन्हें राज्य पैटर्न के हिस्से के समान क्रियाओं को साझा करने के लिए मजबूर करना "सुगंधित" होता है।

असल में, जैसा कि कहीं और बताया गया है, दो मोड यहां सामान्य पैटर्न को उचित ठहराने के लिए पर्याप्त समानता साझा नहीं करते हैं।

राज्य पैटर्न को लागू करने की एक संभावना है, जो समझ में आएगी। चूंकि यह एक विश्वविद्यालय असाइनमेंट है, इसलिए इसके पीछे विचार और औचित्य के लिए क्रेडिट होने की संभावना है। यह पहले बताए गए "ऊपर के स्तर" से संबंधित है। मेरे अनुभव में यह जीयूआई का हिस्सा था जो मोड से स्वतंत्र था। इसने एप्लिकेशन को बंद करने, पिछले पिनबॉल कॉन्फ़िगरेशन खोलने और मोड के बीच स्विच करने जैसी चीजों की अनुमति दी। यह भी संदर्भ निर्भर मेनू आइटम दिखाने के लिए क्या कर सकता है। मेनू की स्थिति वर्तमान मोड से पुनर्प्राप्त की जा सकती है। इसलिए बिल्डर मोड में सेव और अन्य बिल्डर विशिष्ट क्रियाएं शामिल हो सकती हैं, और चलने वाला मोड प्ले/पॉज़ विकल्प प्रदान कर सकता है। यदि आपने राज्य पैटर्न की जांच करने में समय बिताया है, और इसके लिए भुगतान करना चाहते हैं, तो यह एक संभावित विकल्प होगा।

पीएसमरे उस समय डिजाइन पैटर्न के हमारे उपयोग के बारे में उत्साहित प्रतीत होते थे ;-)

+0

है जो आप बता सकते हैं कि "ऊपर के स्तर" से आपका क्या मतलब है? – Robert

+0

मैं एक ऑब्जेक्ट के संदर्भ में सोच रहा था जिसमें विभिन्न तरीकों का संदर्भ है, और उनके बीच स्विच करने की क्षमता है। मोड को खुद के बीच स्विच करने के तरीके के बारे में नहीं पता होना चाहिए, यह उनकी "उपरोक्त" की ज़िम्मेदारी है। एक ठोस उदाहरण के रूप में, यदि प्रत्येक मोड जेपीनल में निहित था, तो "उपरोक्त स्तर" जेएफआरएम होगा जो दोनों के संदर्भ में था, और उनके बीच स्विच करने के लिए नियंत्रण (मेनू आइटम की तरह) था। क्या इससे थोड़ा और समझ आती है? – Grundlefleck

+0

बीटीडब्लू: "ऊपर का स्तर" उचित तकनीकी शब्द नहीं है (जैसा कि आपने अनुमान लगाया होगा), इसलिए यह वास्तव में Googleable नहीं है। "ऑब्जेक्ट जो आपके दोनों मोड ऑब्जेक्ट्स को लिखता है" शायद सही शब्दों की ओर करीब है। – Grundlefleck

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