1.1 परिभाषा और अवधारणा
आज्ञा पैटर्न एक व्यावहारिक डिज़ाइन पैटर्न है जो अनुरोध को एक ऑब्जेक्ट के रूप में संग्रहण करने की अनुमति देता है, ताकि आप ग्राहक को विभिन्न अनुरोधों के साथ पैरामीटरिक कर सकें।
1.2 आज्ञा पैटर्न का उद्देश्य
आज्ञा पैटर्न का मुख्य उद्देश्य भेजने और प्राप्त करने वाले को अलग करना है। अनुरोध को एक ऑब्जेक्ट में संग्रहीत करके, भेजने वाले को केवल आज्ञा ऑब्जेक्ट के साथ परस्पर कार्य संपादक से संवाद करने की आवश्यकता नहीं होती है।
2. आज्ञा पैटर्न की विशेषताएँ और फायदे
आज्ञा पैटर्न की निम्नलिखित विशेषताएँ और फायदे हैं:
- अनुरोध को एक ऑब्जेक्ट में संग्रहीत करने से भेजने और प्राप्त करने वाले को अलग कर दिया जाता है।
- यह अनुरोधों को कतार में लगाने, लॉग दर्ज करने और पूर्वक्रिया ऑपरेशन करने की क्षमता रखता है।
- मूल कोड में परिवर्तन किए बिना नए आदेश विस्तारित किए जा सकते हैं।
3. आज्ञा पैटर्न के व्यावसायिक अनुप्रयोग के उदाहरण
आज्ञा पैटर्न निम्नलिखित परिदृश्यों में लागू होता है:
- अनुरोध को उस ऑब्जेक्ट से अलग करने की आवश्यकता होती है जो कमांड को संपादित करता है।
- पूर्वक्रिया और पूनरावृत्ति ऑपरेशन का समर्थन करना।
- एक कतार में एक सेट के ऑपरेशन को निष्पादित करना।
4.1 UML क्लास आरेख
4.2 उदाहरण परिचय
इस उदाहरण में, हम आज्ञा पैटर्न का एक सरल अमलन बनाएंगे। मान लीजिए कि हमारे पास एक टीवी है जो प्राप्तकर्ता के रूप में है, जो चालू और बंद करने की क्रियाएँ कर सकता है। हमारे पास कोई दूरसंचालक भी है जो विशेष आदेश देकर उन्हें सेट कर सकता है और उन्हें निष्पादित कर सकता है।
4.3.1 आज्ञा इंटरफ़ेस की परिभाषा
type ICommand interface {
Execute()
}
4.3.2 कंक्रीट आज्ञा क्लास का अंमलन
type ConcreteCommand struct {
receiver IReceiver
}
func (c *ConcreteCommand) Execute() {
c.receiver.Action()
}
4.3.3 प्राप्तकर्ता इंटरफ़ेस की परिभाषा
type IReceiver interface {
Action()
}
4.3.4 कंक्रीट प्राप्तकर्ता क्लास का अंमलन
type Receiver struct {}
func (r *Receiver) Action() {
fmt.Println("क्रिया कर रहा है")
}
4.3.5 दायित्व अंमलन
type Invoker struct {
command ICommand
}
func (i *Invoker) SetCommand(command ICommand) {
i.command = command
}
func (i *Invoker) ExecuteCommand() {
i.command.Execute()
}
4.3.6 ग्राहक कोड उदाहरण
func main() {
receiver := &Receiver{}
command := &ConcreteCommand{receiver: receiver}
invoker := &Invoker{}
invoker.SetCommand(command)
invoker.ExecuteCommand()
}
5. आज्ञा पैटर्न और स्ट्रैटेजी पैटर्न के बीच अंतर
आज्ञा पैटर्न और स्ट्रैटेजी पैटर्न कुछ हद तक समान हैं, क्योंकि दोनों किसी मात्रा में व्यवहारों को ऑब्जेक्ट्स में संग्रहीत करते हैं। अंतर यह है कि आज्ञा पैटर्न मुख्य रूप से अनुरोध को ऑब्जेक्ट्स के रूप में संरक्षित करने और पूर्वक्रिया और निष्पादन कतारों जैसे कार्यों की क्रियान्वयन करने के लिए होता है, जबकि स्ट्रैटेजी पैटर्न मुख्य रूप से कुछ एल्गोरिदम को संरक्षित करने और समय-समय पर उनमें से एक एल्गोरिदम को निष्पादित करने के लिए होता है।
आज्ञा पैटर्न लॉगिंग और लेखांकन जैसे आपरेशन्स के लिए अधिक उपयुक्त है, जबकि स्ट्रैटेजी पैटर्न व्यावसायिक तर्क के लचीले परिवर्तनों के लिए अधिक उपयुक्त है।