आपकी समस्या को हल करने के लिए बहुत सारे मान्य दृष्टिकोण हैं। बेसिल स्टारीनेवविच ने एक "शून्य-नौकरशाही" दृष्टिकोण का प्रस्ताव दिया जो आपको एक सरल इंटरफ़ेस के साथ छोड़ देता है और प्रोग्रामर पर उचित रूप से इंटरफ़ेस का उपयोग करके निर्भर करता है। जबकि मुझे यह दृष्टिकोण पसंद है, मैं एक और प्रस्तुत करूंगा जिसमें अधिक ईंजीनियरिंग है लेकिन कंपाइलर को कुछ त्रुटियों को पकड़ने की अनुमति देता है।
विभिन्न राज्यों अपने डिवाइस में किया जा सकता है की पहचान करें, के रूप में Uninitialised
,
Started
,Configured
और इतने पर। सूची को परिमित करना होगा
प्रत्येक राज्य के लिए, struct
उस राज्य से संबंधित आवश्यक अतिरिक्त जानकारी, जैसे DeviceUninitialised
,
DeviceStarted
और इसी तरह एक होल्डिंग को परिभाषित करें।
सभी उपचारों को एक वस्तु में पैक करें DeviceStrategy
जहाँ तरीके 2 में परिभाषित संरचनाओं का उपयोग करते हैं। इनपुट और आउटपुट के रूप में। इस प्रकार, आपके पास एक DeviceStarted DeviceStrategy::start (DeviceUninitalised dev)
विधि हो सकती है (या जो भी आपके प्रोजेक्ट सम्मेलनों के अनुसार बराबर हो सकती है)।
इस दृष्टिकोण के साथ, एक वैध कार्यक्रम को विधि प्रोटोटाइप द्वारा लागू अनुक्रम में कुछ तरीकों को कॉल करना होगा।
विभिन्न राज्य असंबंधित वस्तुएं हैं, इसका कारण प्रतिस्थापन सिद्धांत है। यदि आपके लिए इन संरचनाओं को एक सामान्य पूर्वज साझा करना उपयोगी है, तो याद रखें कि आगंतुक पैटर्न का उपयोग अमूर्त वर्ग के उदाहरण के ठोस प्रकार को पुनर्प्राप्त करने के लिए किया जा सकता है।
जबकि मैंने 3 में वर्णित किया है। एक अद्वितीय DeviceStrategy
वर्ग, ऐसी परिस्थितियाँ हैं जहाँ आप कई वर्गों में प्रदान की जाने वाली कार्यक्षमता को विभाजित करना चाह सकते हैं।
उन्हें संक्षेप में, मेरे द्वारा बताए गए डिज़ाइन के मुख्य बिंदु हैं:
प्रतिस्थापन सिद्धांत के कारण, उपकरण राज्यों का प्रतिनिधित्व करने वाले ऑब्जेक्ट अलग-अलग होने चाहिए और विशेष विरासत संबंध नहीं होने चाहिए।
डिवाइस को स्वयं का प्रतिनिधित्व करने वाली वस्तुओं के बजाय शुरुआती वस्तुओं में डिवाइस उपचार पैक करें, ताकि प्रत्येक डिवाइस या डिवाइस राज्य केवल खुद को देखता है, और रणनीति उन सभी को देखती है और उनके बीच संभावित संक्रमण को व्यक्त करती है।
मैं कसम खाता हूँ कि मैंने एक बार इन लाइनों के बाद एक टेलनेट क्लाइंट कार्यान्वयन का विवरण देखा, लेकिन मैं इसे फिर से नहीं पा रहा था। यह एक बहुत ही उपयोगी संदर्भ होता!
,: इसके लिए, या तो अपने अंतर्ज्ञान का पालन करें या संबंध के लिए अपने वास्तविक कार्यान्वयन में विधियों के समतुल्य वर्गों का पता लगाएं “method₂ ~ method, iff। यह एक ही वस्तु पर उनका उपयोग करने के लिए वैध है ”- यह मानते हुए कि आपके डिवाइस पर सभी उपचारों को घेरने वाली एक बड़ी वस्तु है। लिस्टिंग राज्यों के दोनों तरीके शानदार परिणाम देते हैं।
discovery
याhandshake
?