मैं एक समय की देरी का अनुकरण करने के लिए 'कमांड' और 'समग्र' को कैसे संयोजित करूंगा?


9

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

मैं अपनी समस्या के लिए डिज़ाइन पैटर्न लागू करना चाहता हूं, लेकिन मुझे एक कठिन समय मिल रहा है।

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

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

मैंने वह पढ़ा जो मुझे मिल सकता था, लेकिन मुझे अभी भी सही दिशा में एक धक्का चाहिए:


9
पैटर्न उपकरण हैं। एक हथौड़ा और पेंच चालक नहीं लेता है और मुझे लगता है कि मैं एक घर बनाऊंगा। इसके बजाय, एक घर बनाना शुरू करें और महसूस करें कि एक हथौड़ा काम को आसान कैसे बना देगा।

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

4
आप असतत घटना सिमुलेशन की तलाश कर रहे हैं - क्रोन की तरह लेकिन बिना 'वास्तविक' समय के। इसे बनाएं और फिर पहचानें "ओह, मैं यहां एक समग्र का निर्माण कर रहा हूं - मुझे पता है कि कैसे करना है" समाधान में एक समग्र को छेड़ने के लिए किसी तरह जाने और ढूंढने के बजाय।

1
विशेष रूप से, आपको ACM अगस्त 1977 के संचार से अनुकार ईवेंट सेट के लिए एक कुशल डेटा संरचना मिल सकती है, खंड 20, संख्या 8 काफी उपयोगी (इस शीर्षक के लिए एक Google खोज को एक पीडीएफ को खींचना चाहिए - मुझे लिंक करने में समस्या हो रही है यह) - यह डेटा संरचना को लागू करने की अवधारणा से गुजरता है जो कि एक अनुक्रमित सूची में काफी सुधार होता है।

1
यहाँ Citeseerx पर होस्ट किए गए ACM पेपर का लिंक दिया गया है।
फ्रैंक

जवाबों:


1

आप स्कैला में प्रोग्रामिंग से एक उदाहरण देखना चाहते हैं , क्योंकि उनके पास एक सिम्युलेटर है जो आपको जावा में करने की कोशिश कर रहा है:

http://www.cs.helsinki.fi/u/wikla/OTS/Sisalto/examples/html/ch30.html#sec6

उनके दृष्टिकोण को देखकर आप पा सकते हैं कि आप जिस व्यवहार को चाहते हैं उसे पाने के लिए अपने कार्यक्रम को कैसे बदल सकते हैं।

आपने उल्लेख किया है कि आप इसे आसानी से नहीं जोड़ सकते हैं, इसलिए यह नहीं समझाएं कि आपका दृष्टिकोण क्या है, और आपके सामने आने वाली कठिनाई क्या है, इसलिए लोग आपको कुछ सुझाव दे सकते हैं जिन पर आपने विचार नहीं किया होगा।

जैसा कि उल्लेख किया गया है, डिजाइन पैटर्न आपके कोड के बारे में बात करने के तरीके हैं, एक आशुलिपि के रूप में, लेकिन डिज़ाइन पैटर्न को बस मजबूर करने की कोशिश करने का विचार एक बुरा विचार लगता है।

मूल रूप से एक प्रसार देरी मुश्किल नहीं होनी चाहिए।

आपके पास एक आधार वर्ग हो सकता है Gate, और एक देरी में उसे डाल दिया है।

सभी द्वार इससे विस्तारित होते हैं, और वास्तविक विलंब निर्धारित करते हैं।

अब, जब आप एक सिग्नल का पालन कर रहे हैं, जब एक गेट में, वह धागा नकली विलंब के लिए सो सकता है, लेकिन इसका मतलब यह भी है कि आपको अपने सिम्युलेटेड समय के लिए वास्तविक समय का नक्शा बनाने की आवश्यकता है, क्योंकि आपका सिम्युलेटर एक वास्तविक सिस्टम की तुलना में धीमा होगा। होने वाला।

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

यह एक गेम लूप के समान होगा।


0

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

तब आप कमांड पैटर्न का उपयोग नहीं कर रहे हैं।

यदि मेरे पास एक 'कम्पोजिट' गेट है, तो क्या इसका अपना डिस्पैचर भी है?

प्रिय भगवान नं। समग्र पैटर्न का पूरा बिंदु यह है कि आप किसी स्थान पर एक समग्र वस्तु की आपूर्ति कर सकते हैं जो केवल एक वस्तु की उम्मीद कर रहा है। यह आपको एक समझदार तरीके से व्यवहार को बनाने की अनुमति देता है।

क्या मुझे कतार का प्रबंधन करने के लिए एक सिंगलटन का उपयोग करने की आवश्यकता है?

बिलकुल नहीं। क्या आपके पास पूरी दुनिया में केवल एक कुक और एक वेट्रेस है? क्या उनके पास केवल एक रसोई है?

कमांड और कम्पोजिट पैटर्न को मिलाना काफी स्ट्रेट-फॉरवर्ड है। आपके पास कुछ इंटरफ़ेस है जो एक कमांड का प्रतिनिधित्व करता है। प्रत्येक ठोस आदेश ओवरराइड कर सकता है (या अन्यथा इसे गैर-विरासत भाषाओं में संतुष्ट कर सकता है) उस इंटरफ़ेस को कुछ व्यवहार प्रदान करने के लिए। आपका विलंब एक ऐसा सरल व्यवहार है।

कम्पोज़िट पैटर्न एकल इंटरफ़ेस के पीछे दो (या अधिक) ऑब्जेक्ट / व्यवहार प्रदान करता है। इस उदाहरण के लिए सबसे सरल उपयोग एक मिश्रित कमांड होगा जो दो अन्य कमांड लेता है और फिर जब निष्पादित करने के लिए कहा जाता है, तो दो संग्रहीत कमांड चलाता है। इस तरह आप एक विलम्बित कमांड बनाने के लिए अपनी अलग-थलग 'देरी' कमांड और किसी अन्य मनमाना आदेश को ले सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.