रणनीति डिजाइन पैटर्न और राज्य डिजाइन पैटर्न के बीच अंतर क्या हैं? मैं वेब पर काफी कुछ लेखों के माध्यम से जा रहा था, लेकिन स्पष्ट रूप से अंतर नहीं कर पाया।
क्या कोई कृपया आम आदमी की शर्तों में अंतर बता सकता है?
रणनीति डिजाइन पैटर्न और राज्य डिजाइन पैटर्न के बीच अंतर क्या हैं? मैं वेब पर काफी कुछ लेखों के माध्यम से जा रहा था, लेकिन स्पष्ट रूप से अंतर नहीं कर पाया।
क्या कोई कृपया आम आदमी की शर्तों में अंतर बता सकता है?
जवाबों:
ईमानदारी से, दो पैटर्न व्यवहार में समान हैं, और उन दोनों के बीच का अंतर अलग-अलग होता है, जो आपके पूछने पर निर्भर करता है। कुछ लोकप्रिय विकल्प हैं:
एक "क्लासिक" कार्यान्वयन सूची में प्रत्येक आइटम के लिए या तो राज्य या रणनीति से मेल खाएगा, लेकिन आप उन संकरों पर चलते हैं जिनमें दोनों का मिश्रण है। चाहे कोई विशेष अधिक हो, स्टेट-वाई या स्ट्रेटजी-वाई अंततः एक व्यक्तिपरक प्रश्न है।
getStatus()
विधि हो सकती है
जो ऑब्जेक्ट की स्थिति के आधार पर विभिन्न स्थितियों को लौटाएगी, लेकिन विधि के कॉलर को प्रत्येक संभावित स्थिति के लिए अलग-अलग कोडित करने की आवश्यकता नहीं है।अंतर बस इतना है कि वे विभिन्न समस्याओं को हल करते हैं:
इन विभिन्न लक्ष्यों को प्राप्त करने के लिए निर्माण हालांकि बहुत समान हैं; दोनों पैटर्न प्रतिनिधिमंडल के साथ रचना के उदाहरण हैं।
उनके लाभों पर कुछ टिप्पणियां:
राज्य पैटर्न का उपयोग करके राज्य-धारण (संदर्भ) वर्ग को यह ज्ञात होने से राहत मिलती है कि यह किस राज्य या प्रकार का है और कौन से राज्य या प्रकार उपलब्ध हैं। इसका मतलब यह है कि वर्ग खुले-बंद डिज़ाइन सिद्धांत (OCP) का पालन करता है: वर्ग उन राज्यों / प्रकारों में परिवर्तन के लिए बंद है, लेकिन राज्य / प्रकार एक्सटेंशन के लिए खुले हैं।
का उपयोग करके रणनीति पैटर्न एल्गोरिथ्म का इस्तेमाल करने वाली (संदर्भ) वर्ग के ज्ञान से राहत मिली है कैसे (- "एल्गोरिथ्म") एक निश्चित कार्य करने के लिए। यह मामला OCP का पालन भी करता है; इस कार्य को करने के तरीके में बदलाव के लिए वर्ग को बंद कर दिया गया है, लेकिन इस कार्य को हल करने के लिए अन्य एल्गोरिदम के परिवर्धन के लिए डिजाइन बहुत खुला है।
यह संभावना एकल जिम्मेदारी सिद्धांत (एसआरपी) के संदर्भ वर्ग के संदर्भ में भी सुधार करती है। इसके अलावा एल्गोरिथ्म अन्य वर्गों द्वारा पुन: उपयोग के लिए आसानी से उपलब्ध हो जाता है।
क्या कोई आम आदमी की शर्तों में व्याख्या कर सकता है?
डिजाइन पैटर्न वास्तव में "आम आदमी" अवधारणा नहीं हैं, लेकिन मैं इसे यथासंभव स्पष्ट करने की कोशिश करूंगा। किसी भी डिज़ाइन पैटर्न को तीन आयामों में माना जा सकता है:
आइए राज्य और रणनीति की तुलना करें।
राज्य का उपयोग दो मामलों में से एक में किया जाता है [GoF book p। 306] :
- किसी वस्तु का व्यवहार उसकी अवस्था पर निर्भर करता है, और उसे उस अवस्था के आधार पर अपने व्यवहार को रन-टाइम में बदलना चाहिए।
- ऑपरेशंस में बड़े, मल्टीपार्ट सशर्त स्टेटमेंट होते हैं जो ऑब्जेक्ट की स्थिति पर निर्भर करते हैं। यह राज्य आमतौर पर एक या अधिक प्रगणित स्थिरांक द्वारा दर्शाया जाता है। अक्सर, कई ऑपरेशनों में यह समान सशर्त संरचना होगी। राज्य पैटर्न सशर्त की प्रत्येक शाखा को एक अलग वर्ग में रखता है। यह आपको ऑब्जेक्ट की स्थिति को अपने आप में एक ऑब्जेक्ट के रूप में मानता है जो अन्य वस्तुओं से स्वतंत्र रूप से भिन्न हो सकता है।
यदि आप यह सुनिश्चित करना चाहते हैं कि आपको वास्तव में राज्य पैटर्न हल करने की समस्या है, तो आपको एक परिमित राज्य मशीन का उपयोग करके ऑब्जेक्ट के राज्यों को मॉडल करने में सक्षम होना चाहिए । आप यहां एक लागू उदाहरण पा सकते हैं ।
प्रत्येक राज्य संक्रमण राज्य इंटरफ़ेस में एक विधि है। इसका मतलब यह है कि एक डिजाइन के लिए, आपको इस पैटर्न को लागू करने से पहले राज्य के बदलावों के बारे में निश्चित होना चाहिए। अन्यथा, यदि आप बदलाव जोड़ते हैं या हटाते हैं, तो इसके लिए इंटरफ़ेस और इसे लागू करने वाले सभी वर्गों को बदलने की आवश्यकता होगी।
मुझे व्यक्तिगत रूप से यह पैटर्न उपयोगी नहीं लगा। आप हमेशा लुकअप टेबल (यह एक OO तरीका नहीं है, लेकिन यह बहुत अच्छी तरह से काम करता है) का उपयोग करके परिमित राज्य मशीनों को लागू कर सकता है।
रणनीति का उपयोग निम्नलिखित [GoF book p के लिए किया जाता है । 316] :
- कई संबंधित कक्षाएं केवल उनके व्यवहार में भिन्न होती हैं। रणनीतियाँ कई व्यवहारों में से एक के साथ एक वर्ग को कॉन्फ़िगर करने का एक तरीका प्रदान करती हैं।
- आपको एल्गोरिथ्म के विभिन्न प्रकारों की आवश्यकता है। उदाहरण के लिए, आप अलग-अलग स्थान / समय व्यापार-नापसंद को दर्शाते एल्गोरिदम को परिभाषित कर सकते हैं। इन वेरिएंट को एल्गोरिदम [एचओ 88] की श्रेणी पदानुक्रम के रूप में लागू किए जाने पर रणनीतियों का उपयोग किया जा सकता है।
- एक एल्गोरिथ्म डेटा का उपयोग करता है जिसके बारे में ग्राहकों को पता नहीं होना चाहिए। जटिल, एल्गोरिथ्म-विशिष्ट डेटा संरचनाओं को उजागर करने से बचने के लिए रणनीति पैटर्न का उपयोग करें।
- एक वर्ग कई व्यवहारों को परिभाषित करता है, और ये इसके संचालन में कई सशर्त बयानों के रूप में दिखाई देते हैं। कई सशर्तियों के बजाय, संबंधित सशर्त शाखाओं को अपने स्वयं के रणनीति वर्ग में स्थानांतरित करें।
रणनीति लागू करने का अंतिम मामला पॉलिमॉर्फिज्म के साथ रिप्लेसमेंट कंडीशनल के रूप में जाना जाता है ।
सारांश: राज्य और रणनीति बहुत भिन्न समस्याओं को हल करते हैं। यदि आपकी समस्या को एक परिमित राज्य मशीन के साथ तैयार नहीं किया जा सकता है, तो संभव है कि राज्य पैटर्न उपयुक्त न हो। यदि आपकी समस्या जटिल एल्गोरिथ्म के अलग-अलग रूपों के बारे में नहीं है, तो रणनीति लागू नहीं होती है।
राज्य में निम्नलिखित यूएमएल वर्ग संरचना है:
रणनीति में निम्नलिखित UML वर्ग संरचना है:
सारांश: स्थैतिक संरचना के संदर्भ में, ये दो पैटर्न ज्यादातर समान हैं। वास्तव में, इस तरह के पैटर्न का पता लगाने वाले उपकरण यह मानते हैं कि " [...] पैटर्न की संरचना समान है, एक स्वचालित प्रक्रिया द्वारा उनके भेद को रोकती है (उदाहरण के लिए, वैचारिक जानकारी का उल्लेख किए बिना)। "
एक बड़ा अंतर हो सकता है, हालांकि, अगर कंक्रीटस्टेट्स खुद को राज्य के बदलाव का फैसला करते हैं ( ऊपर चित्र में "" निर्धारित कर सकते हैं "संघों को देखें)। इसके परिणामस्वरूप ठोस राज्यों के बीच युग्मन होता है। उदाहरण के लिए (अगला खंड देखें), राज्य A राज्य बी के लिए संक्रमण का निर्धारण करता है। यदि संदर्भ वर्ग अगले ठोस राज्य में संक्रमण का फैसला करता है, तो ये निर्भरताएं दूर हो जाती हैं।
जैसा कि ऊपर दिए गए समस्या अनुभाग में बताया गया है, राज्य का तात्पर्य है कि व्यवहार किसी वस्तु की अवस्था के आधार पर रन-टाइम में बदलता है । इसलिए, राज्य संक्रमण की धारणा लागू होती है, जैसा कि परिमित राज्य मशीन के संबंध में चर्चा की गई थी । [GoF] में उल्लेख किया गया है कि संक्रमणों को या तो कंकरीट के उपवर्गों में, या एक केंद्रीकृत स्थान में परिभाषित किया जा सकता है (जैसे कि तालिका आधारित स्थान)।
चलो एक साधारण परिमित राज्य मशीन मान लेते हैं:
उपवर्गों ने राज्य संक्रमण (अगली राज्य वस्तु वापस करके) तय करते हुए, गतिशील कुछ इस तरह दिखता है:
रणनीति की गतिशीलता को दिखाने के लिए , वास्तविक उदाहरण उधार लेना उपयोगी है ।
सारांश : प्रत्येक पैटर्न संदर्भ के आधार पर कुछ करने के लिए एक बहुरूपिक कॉल का उपयोग करता है। राज्य पैटर्न में, बहुपद कॉल (संक्रमण) अक्सर अगले राज्य में परिवर्तन का कारण बनता है । रणनीति पैटर्न में, बहुरूपिक कॉल आमतौर पर संदर्भ को नहीं बदलता है (उदाहरण के लिए, क्रेडिट कार्ड द्वारा भुगतान करने के बाद एक बार आप पेपैल द्वारा अगली बार भुगतान नहीं करेंगे)। फिर से, स्टेट पैटर्न की गतिकी इसकी संगत फिनिनेट स्टेट मशीन द्वारा निर्धारित की जाती है , जो (मेरे लिए) इस पैटर्न के सही अनुप्रयोग के लिए आवश्यक है।
स्ट्रेटजी पैटर्न में एक होस्टिंग क्लास से एल्गोरिथम के कार्यान्वयन को आगे बढ़ाना और इसे एक अलग क्लास में रखना शामिल है। इसका मतलब है कि मेजबान वर्ग को प्रत्येक एल्गोरिथ्म के कार्यान्वयन को स्वयं प्रदान करने की आवश्यकता नहीं है, जिससे अशुद्ध कोड होने की संभावना है।
छँटाई एल्गोरिदम आमतौर पर एक उदाहरण के रूप में उपयोग किया जाता है क्योंकि वे सभी एक ही तरह की चीज़ करते हैं (सॉर्ट)। यदि प्रत्येक अलग-अलग छंटाई एल्गोरिथ्म को अपनी कक्षा में रखा जाता है, तो ग्राहक आसानी से चुन सकता है कि कौन सा एल्गोरिथ्म का उपयोग करना है और पैटर्न इसे एक्सेस करने का एक आसान तरीका प्रदान करता है।
स्टेट पैटर्न में ऑब्जेक्ट की स्थिति बदलने पर ऑब्जेक्ट का व्यवहार बदलना शामिल है। इसका मतलब यह है कि मेजबान वर्ग में उन सभी अलग-अलग राज्यों के लिए व्यवहार का कार्यान्वयन नहीं है जो इसमें हो सकते हैं। मेजबान वर्ग आमतौर पर एक वर्ग को घेरता है जो किसी दिए गए राज्य में आवश्यक कार्यक्षमता प्रदान करता है, और एक अलग वर्ग में स्विच करता है। जब राज्य बदलता है।
ग्राहक कॉल से निपटने के लिए एक आईवीआर (इंटरएक्टिव वॉयस रिस्पांस) प्रणाली पर विचार करें। आप इसे ग्राहकों को संभालने के लिए प्रोग्राम करना चाह सकते हैं:
इस स्थिति को संभालने के लिए आप स्टेट पैटर्न का उपयोग कर सकते हैं ।
एक ग्राहक को समर्थन कार्यकारी से जोड़ने की यह प्रक्रिया खुद एक रणनीति पैटर्न का उपयोग करके लागू की जा सकती है, जहां अधिकारियों को निम्न में से किसी एक के आधार पर चुना जाता है:
रणनीति पैटर्न कुछ क्रिया करने के लिए ' कैसे ' पर फैसला करता है और राज्य पैटर्न उन्हें प्रदर्शन करने के लिए ' कब ' पर तय करता है।
रणनीति उन वस्तुओं का प्रतिनिधित्व करती है जो कुछ करते हैं, एक ही शुरुआत और अंतिम परिणामों के साथ, लेकिन आंतरिक रूप से विभिन्न तरीकों का उपयोग करते हुए। इस अर्थ में वे एक क्रिया के कार्यान्वयन का प्रतिनिधित्व करने के लिए समान हैं। राज्य पैटर्न OTOH उन वस्तुओं का उपयोग करता है जो "कुछ" हैं - एक ऑपरेशन की स्थिति। हालांकि वे उस डेटा पर भी परिचालन का प्रतिनिधित्व कर सकते हैं, वे एक क्रिया की तुलना में एक संज्ञा का प्रतिनिधित्व करने के लिए अधिक अनुरूप हैं, और राज्य मशीनों के अनुरूप हैं।
रणनीति: रणनीति तय की जाती है और आमतौर पर इसमें कई चरण होते हैं। (सॉर्टिंग केवल एक कदम है और इस प्रकार यह एक बहुत बुरा उदाहरण है क्योंकि यह इस पैटर्न के उद्देश्य को समझने के लिए बहुत ही आदिम है)। रणनीति में आपकी "मुख्य" दिनचर्या कुछ सार तरीकों को बुला रही है। उदाहरण के लिए "एंटर रूम स्ट्रेटेजी", "मेन-मेथड" है goThroughDoor (), जो दिखता है: अप्रोचडूर (), अगर (लॉक ()) ओपनलॉक (); खुला दरवाजा(); enterRoom (); मोड़(); बंद दरवाजा(); if (wasocked ()) lockDoor ();
अब इस सामान्य "एल्गोरिथ्म" के उप-वर्ग एक बंद कमरे से दूसरे कमरे में जाने के लिए संभव बंद दरवाजे के माध्यम से एल्गोरिथ्म के चरणों को लागू कर सकते हैं।
दूसरे शब्दों में, रणनीति को उपवर्गित करने से मूल एल्गोरिदम नहीं बदलता है, केवल व्यक्तिगत चरण।
यह एक टेम्पलेट विधि पैटर्न है। अब अपने स्वयं के कार्यान्वयन वस्तुओं में एक साथ जुड़े कदमों (अनलॉकिंग / लॉकिंग और ओपनिंग / क्लोजिंग) को डालें और उन्हें सौंपें। जैसे चाबी वाला ताला और कोड कार्ड वाला ताला दो तरह के ताले होते हैं। "चरण" ऑब्जेक्ट्स की रणनीति से प्रतिनिधि। अब आपके पास एक रणनीति पैटर्न है।
एक स्टेट पैटर्न कुछ पूरी तरह से अलग है।
आपके पास एक रैपिंग ऑब्जेक्ट और रैपेड ऑब्जेक्ट है। लिपटे एक "राज्य" है। राज्य वस्तु केवल अपने आवरण के माध्यम से ही पहुँच जाती है। अब आप किसी भी समय लपेटी गई वस्तु को बदल सकते हैं, इस प्रकार आवरण अपनी स्थिति, या यहाँ तक कि "वर्ग" या प्रकार को बदल सकता है।
उदाहरण के लिए, आपके पास सेवा पर एक लॉग है। यह एक उपयोगकर्ता नाम और एक पासवर्ड स्वीकार करता है। इसमें केवल एक ही विधि है: लॉगऑन (स्ट्रिंग यूजरनेम, स्ट्रिंग पासवार्ड)। यह तय करने के बजाय कि लॉग ऑन स्वीकार किया जाता है या नहीं, यह निर्णय को किसी राज्य की वस्तु को दर्शाता है। यदि उपयोगकर्ता / पास संयोजन मान्य है और लॉग ऑन करता है, तो यह ऑब्जेक्ट आमतौर पर सिर्फ जांच करता है। लेकिन अब आप "चेकर" का आदान-प्रदान एक से कर सकते हैं, जो केवल निजीकृत उपयोगकर्ताओं को लॉग ऑन करने देता है (जैसे मेनटेनस टाइम के दौरान) या किसी एक को लॉग ऑन करने देता है। इसका मतलब है कि "चेकर" सिस्टम की "लॉग ऑन स्थिति" को व्यक्त करता है।
सबसे महत्वपूर्ण अंतर यह है: जब आप एक रणनीति चुनते हैं तो आप उसके साथ चिपके रहते हैं जब तक आप उसके साथ नहीं होते। इसका मतलब है कि आप इसकी "मुख्य विधि" कहते हैं और जब तक कि आप चल रहे होते हैं तब तक आप रणनीति को कभी नहीं बदलते हैं। अपने सिस्टम के रनटाइम के दौरान राज्य पैटर्न की स्थिति में OTOH, जैसा कि आप फिट देखते हैं, आप मनमाने ढंग से राज्य बदलते हैं।
रणनीति पैटर्न का उपयोग तब किया जाता है जब आपके पास किसी विशिष्ट कार्य के लिए कई एल्गोरिथ्म होते हैं और क्लाइंट रनटाइम में उपयोग किए जाने वाले वास्तविक कार्यान्वयन का फैसला करता है।
विकी रणनीति पैटर्न लेख से यूएमएल आरेख :
प्रमुख विशेषताऐं:
अधिक जानकारी और वास्तविक दुनिया उदाहरणों के लिए इस पोस्ट का संदर्भ लें:
रणनीति पैटर्न का वास्तविक विश्व उदाहरण
स्टेट पैटर्न किसी वस्तु को उसके आंतरिक अवस्था में परिवर्तन होने पर उसके व्यवहार को बदलने की अनुमति देता है
यूएमआई आरेख विकि स्टेट पैटर्न लेख से:
यदि हमें किसी वस्तु के व्यवहार को उसके राज्य के आधार पर बदलना है, तो हमारे पास ऑब्जेक्ट में एक स्टेट वैरिएबल हो सकता है और स्टेट के आधार पर विभिन्न क्रियाओं को करने के लिए if-else कंडीशन ब्लॉक का उपयोग कर सकता है। राज्य पैटर्न का उपयोग प्रसंग और राज्य के माध्यम से इसे प्राप्त करने के लिए एक व्यवस्थित और हार-युग्मित तरीका प्रदान करने के लिए किया जाता है कार्यान्वयन के ।
इस जर्नलदेव का संदर्भ लेंअधिक जानकारी के लिए लेख का ।
से मुख्य अंतर sourcemaking और journaldev लेख:
आम आदमी की भाषा में,
रणनीति पैटर्न में, कोई राज्य नहीं हैं या उन सभी में एक ही राज्य है। किसी एक कार्य को करने के सभी तरीके अलग-अलग होते हैं, जैसे अलग-अलग डॉक्टर एक ही रोगी के एक ही रोग को अलग-अलग तरीकों से मानते हैं।
राज्य के पैटर्न में, विषयगत रूप से राज्य होते हैं, जैसे रोगी की वर्तमान स्थिति (उच्च तापमान या निम्न अस्थायी), जिसके आधार पर कार्रवाई का अगला कोर्स (चिकित्सा पर्चे) तय किया जाएगा। और एक राज्य दूसरे राज्य को जन्म दे सकता है, इसलिए राज्य है राज्य निर्भरता के लिए (तकनीकी रूप से रचना)।
यदि हम तकनीकी रूप से इसे समझने की कोशिश करते हैं, तो दोनों की तुलना के आधार पर, हम स्थिति की विषयवस्तु खो सकते हैं, क्योंकि दोनों बहुत समान दिखते हैं।
दोनों प्रतिमान एक आधार वर्ग के प्रतिनिधि होते हैं जिसमें कई व्युत्पन्न होते हैं, लेकिन यह केवल राज्य के पैटर्न में है कि ये व्युत्पन्न वर्ग संदर्भ श्रेणी के संदर्भ हैं।
इसे देखने का एक और तरीका यह है कि रणनीति पैटर्न राज्य पैटर्न का एक सरल संस्करण है; एक उप-पैटर्न, यदि आपको पसंद है। यह वास्तव में निर्भर करता है कि क्या आप चाहते हैं कि व्युत्पन्न राज्य संदर्भ को संदर्भ में वापस रखें या नहीं (यानी: क्या आप चाहते हैं कि वे संदर्भ पर विधियों को कॉल करें)।
अधिक जानकारी के लिए: रॉबर्ट सी मार्टिन (और मीका मार्टिन) ने अपनी पुस्तक "एजाइल प्रिंसिपल्स, पैटर्न एंड प्रैक्टिस इन सी #" में इसका उत्तर दिया। ( http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/013185788 )
यह एक बहुत पुराना प्रश्न है, लेकिन फिर भी, मैं भी उन्हीं उत्तरों की तलाश में था और यही मैंने खोजा है।
स्टेट पैटर्न के लिए, मेडियल प्लेयर प्ले बटन के उदाहरण पर विचार करें। जब हम खेलते हैं तो यह खेलना शुरू कर देता है और इस संदर्भ को जागरूक करता है कि यह खेल रहा है। हर बार जब ग्राहक प्ले ऑपरेशन करना चाहता है तो वह खिलाड़ी की वर्तमान स्थिति की जांच करता है। अब क्लाइंट जानता है कि ऑब्जेक्ट की स्थिति संदर्भ ऑब्जेक्ट के माध्यम से खेल रही है इसलिए वह पॉज़ स्टेट ऑब्जेक्ट्स क्रिया विधि को कॉल करता है। ग्राहक को राज्य का बोध कराने वाला हिस्सा और उसे किस राज्य में कार्रवाई करने की आवश्यकता होती है, को स्वचालित किया जा सकता है।
https://www.youtube.com/watch?v=e45RMc76884 https://www.tutorialspoint.com/design_pattern/state_pattern.htm
रणनीति पैटर्न के मामले में, वर्ग आरेख की व्यवस्था राज्य पैटर्न के समान है। क्लाइंट कुछ ऑपरेशन करने के लिए इस व्यवस्था में आता है। विभिन्न राज्यों के बजाय अलग-अलग एल्गोरिदम हैं उदाहरण के लिए अलग-अलग विश्लेषण कहते हैं कि पैटर्न पर प्रदर्शन करने की आवश्यकता है। यहां ग्राहक संदर्भ को बताते हैं कि वह क्या करना चाहता है कि एल्गोरिथ्म (व्यवसाय परिभाषित कस्टम एल्गोरिथम) और फिर वह क्या करता है।
https://www.tutorialspoint.com/design_pattern/strategy_pattern.htm
दोनों कार्यान्वयन करीब सिद्धांत को खोलते हैं इसलिए डेवलपर में नए राज्यों को राज्य पैटर्न और नए एल्गोरिथ्म में जोड़ने की क्षमता है।
लेकिन अंतर यह है कि उनका उपयोग किया जाता है जो कि राज्य पैटर्न का उपयोग वस्तु की स्थिति के आधार पर विभिन्न तर्क को निष्पादित करने के लिए किया जाता है। और रणनीति के एक मामले में अलग तर्क।
राज्य व्युत्पन्न राज्यों के भीतर थोड़ी निर्भरता के साथ आता है: जैसे एक राज्य को इसके बाद आने वाले अन्य राज्यों के बारे में पता होता है। उदाहरण के लिए, समर किसी भी मौसम के लिए सर्दियों के बाद आता है, या खरीदारी के लिए डिपॉजिट स्टेट के बाद डिलीवरी स्टेट।
दूसरी ओर, रणनीति की इन जैसी कोई निर्भरता नहीं है। यहां, कार्यक्रम / उत्पाद प्रकार के आधार पर किसी भी प्रकार की स्थिति को आरंभ किया जा सकता है।
अंतर की चर्चा http://c2.com/cgi/wiki?StrategyPattern में की गई है । मैंने डेटा के विश्लेषण के लिए अलग-अलग एल्गोरिदम को एक समग्र ढांचे के भीतर चुनने की अनुमति देने के लिए रणनीति पैटर्न का उपयोग किया है। इसके माध्यम से आप समग्र रूपरेखा और उसके तर्क को बदले बिना एल्गोरिदम जोड़ सकते हैं।
एक विशिष्ट उदाहरण यह है कि आपके पास किसी फ़ंक्शन को अनुकूलित करने के लिए एक रूपरेखा है। फ्रेमवर्क डेटा और पैरामीटर सेट करता है। रणनीति पैटर्न आपको फ्रेमवर्क में बदलाव किए बिना एल्गोरिदम जैसे कि स्टेपटेस्ट अवरोही, संयुग्मक ग्रेडिएंट, बीएफजीएस आदि का चयन करने की अनुमति देता है।
रणनीति और राज्य पैटर्न दोनों की संरचना समान है। यदि आप दोनों पैटर्न के लिए यूएमएल वर्ग आरेख को देखते हैं तो वे बिल्कुल समान दिखते हैं, लेकिन उनका इरादा बिल्कुल अलग है। राज्य डिजाइन पैटर्न का उपयोग किसी वस्तु की स्थिति को परिभाषित करने और प्रबंधित करने के लिए किया जाता है, जबकि रणनीति पैटर्न का उपयोग विनिमेय एल्गोरिदम के सेट को परिभाषित करने के लिए किया जाता है और क्लाइंट को उनमें से एक का चयन करने की अनुमति देता है। इसलिए रणनीति पैटर्न एक ग्राहक चालित पैटर्न है, जबकि ऑब्जेक्ट वहां राज्य का प्रबंधन कर सकता है।
जब आपके पास एक परियोजना है जिसे 2 कार्यों में विभाजित किया जा सकता है:
कार्य 1: आप पूरा करने के लिए दो अलग-अलग एल्गोरिदम में से एक का उपयोग कर सकते हैं: alg1, alg2
कार्य 2: आप पूरा करने के लिए तीन अलग-अलग एल्गोरिदम में से एक का उपयोग कर सकते हैं: alg3, alg4, alg5
alg1 और alg2 विनिमेय हैं; alg3, alg4 और alg5 विनिमेय हैं।
कार्य 1 और कार्य 2 में प्रदर्शन करने के लिए कौन सा एल्गोरिदम चुनना राज्यों पर निर्भर करता है:
राज्य 1: आपको कार्य 1 में alg1 और कार्य 2 में alg3 की आवश्यकता है
राज्य 2: आपको कार्य 1 में alg2 और कार्य 2 में alg5 की आवश्यकता है
आप संदर्भ 1 से राज्य 2 तक राज्य वस्तु बदल सकते हैं। फिर आपका कार्य alg1 और alg3 के बजाय alg2 और alg5 द्वारा पूरा किया जाएगा।
आप कार्य 1 या कार्य 2 के लिए अधिक विनिमेय एल्गोरिदम जोड़ सकते हैं। यह रणनीति पैटर्न है।
आपके पास कार्य 1 और कार्य 2 में एल्गोरिदम के विभिन्न संयोजन वाले अधिक राज्य हो सकते हैं। राज्य पैटर्न आपको एक राज्य से दूसरे राज्य में स्विच करने और एल्गोरिदम के विभिन्न संयोजन करने की अनुमति देता है।
'रणनीति' केवल एक एल्गोरिथ्म है जिसे आप अपनी आवश्यकता के अनुसार विभिन्न परिस्थितियों में बदल सकते हैं, और यह आपके लिए कुछ प्रक्रिया करता है। पूर्व। आप चुन सकते हैं कि किसी फ़ाइल को कैसे संपीड़ित करें। zip या rar ... एक विधि में।
लेकिन 'राज्य' आपके सभी ऑब्जेक्ट व्यवहार को बदल सकता है, जब यह बदलता है, तो यह अन्य क्षेत्रों को भी बदल सकता है ... यही कारण है कि इसके मालिक का संदर्भ है। आपको ध्यान देना चाहिए कि ऑब्जेक्ट फ़ील्ड को बदलना ऑब्जेक्ट व्यवहार को बिल्कुल बदल सकता है। पूर्व। जब आप State0 को State1 में बदल देते हैं, तो आप एक पूर्णांक को 10 में बदल देते हैं। इसलिए जब हम obj.f0 () कहते हैं, तो कुछ गणना करते हैं और उस पूर्णांक का उपयोग करते हैं, यह परिणाम को प्रभावित करता है।