बहुत पुराने प्रश्न का उत्तर दे रहा हूं। (क्या कोई सबसे अधिक मतदान के बजाय नवीनतम उत्तर देख रहा है?)
यह समानता के कारण होने के लिए एक वैध भ्रम है। रणनीति और कमांड पैटर्न दोनों ही इनकैप्सुलेशन का उपयोग करते हैं । लेकिन यह उन्हें समान नहीं बनाता है।
महत्वपूर्ण अंतर यह है कि क्या समझाया गया है। OO सिद्धांत, दोनों पैटर्न निर्भर करते हैं, जो अलग-अलग होते हैं ।
रणनीति के मामले में, क्या भिन्न होता है एल्गोरिथ्म । उदाहरण के लिए, एक रणनीति ऑब्जेक्ट जानता है कि एक्सएमएल फ़ाइल को आउटपुट कैसे किया जाता है, जबकि अन्य आउटपुट, जेएसएन कहते हैं। अलग- अलग वर्गों में अलग- अलग एल्गोरिदम रखे गए हैं ( इनकैप्सुलेटेड )। यह बहुत ही सरल है।
आदेश के मामले में, जो भिन्न होता है वह स्वयं अनुरोध है। अनुरोध से आ सकती है File Menu > Delete
या Right Click > Context Menu > Delete
या Just Delete Button pressed
। सभी तीन मामले एक ही प्रकार के 3 कमांड ऑब्जेक्ट उत्पन्न कर सकते हैं। ये आदेश ऑब्जेक्ट केवल हटाने के लिए 3 अनुरोधों का प्रतिनिधित्व करते हैं; विलोपन एल्गोरिथ्म नहीं। चूंकि अनुरोध अब वस्तुओं का गुच्छा हैं, इसलिए हम उन्हें आसानी से प्रबंधित कर सकते हैं। अचानक इसे पूर्ववत या फिर से करना जैसी कार्यक्षमता प्रदान करने के लिए तुच्छ हो जाता है।
इससे कोई फर्क नहीं पड़ता कि कमांड अनुरोधित तर्क को कैसे लागू करता है। कॉलिंग एग्जीक्यूट () पर, यह विलोपन को ट्रिगर करने के लिए एक एल्गोरिथ्म को लागू कर सकता है या इसे अन्य वस्तुओं को भी सौंप सकता है, किसी रणनीति को भी सौंप सकता है। यह केवल कमांड पैटर्न का कार्यान्वयन विवरण है। यही कारण है कि इसे आदेश के रूप में नामित किया गया है, हालांकि यह अनुरोध करने के लिए एक विनम्र तरीका नहीं है : -)
रणनीति के साथ इसका विरोध करें; यह पैटर्न केवल वास्तविक तर्क से संबंधित है जिसे निष्पादित किया जाता है। यदि हम ऐसा करते हैं, तो यह कक्षाओं के न्यूनतम सेट के साथ व्यवहार के विभिन्न संयोजनों को प्राप्त करने में मदद करता है, इस प्रकार वर्ग विस्फोट को रोकता है।
मुझे लगता है, कमांड हमें एनकैप्सुलेशन की हमारी समझ को व्यापक बनाने में मदद करता है जबकि रणनीति एनकैप्सुलेशन और पॉलीमॉर्फिज़्म का प्राकृतिक उपयोग प्रदान करती है।