1. जवाबिलता श्रृंखला पैटर्न क्या है
जवाबिलता श्रृंखला पैटर्न एक व्यावहारिक डिज़ाइन पैटर्न है जो एक अनुरोध के भेजने वाले और प्राप्त करने वाले को अलग करता है, जिससे कई वस्तुओं को अनुरोध संभालने का अवसर मिलता है। प्रत्येक प्राप्तकर्ता में एक और प्राप्तकर्ता का संदर्भ होता है, और अगर यह अनुरोध संभाल नहीं सकता है, तो यह अगले प्राप्तकर्ता को अनुरोध आगे भेजता है जब तक अनुरोध को संभाला नहीं जाता या श्रृंखला के अंत तक नहीं पहुंचता।
2. जवाबिलता श्रृंखला पैटर्न की विशेषताएँ और फायदे
जवाबिलता श्रृंखला पैटर्न की विशेषताएँ और फायदे निम्नलिखित हैं:
- प्रेषक और प्राप्तकर्ता का अलगाव: प्रेषक को जरूरत नहीं है कि वह सोचे कि कौन सा प्राप्तकर्ता अनुरोध संभालता है, और न ही उसे श्रृंखला में विशेष प्रकार के हैंडलर्स के बारे में पता होना चाहिए।
- लचीलापन: इसे प्रेषक और प्राप्तकर्ता के कोड को बदले बिना श्रृंखला में हैंडलर्स के डायनामिक जोड़ने, हटाने, या पुनर्व्यवस्थापन की अनुमति है।
- विस्तारयोग्यता: नए विशेष हैंडलर्स को जोड़कर दायित्व श्रृंखला को बढ़ाना आसान है।
- एकल उत्तराधिकार सिद्धांत: प्रत्येक विशेष हैंडलर को केवल अपने स्वयं के हैंडलिंग की लॉजिक के बारे में चिंता करनी होती है।
- समाकृतितात्मकता: हैंडलर्स की श्रृंखला को आवश्यकतानुसार कॉन्फ़िगर किया जा सकता है, अनुरोधों को विभिन्न हैंडलर्स की विभिन्न श्रृंखलाओं में भेजने देने की अनुमति देता है।
3. जवाबिलता श्रृंखला पैटर्न के व्यावहारिक अनुप्रयोग के उदाहरण
जवाबिलता श्रृंखला पैटर्न का कई व्यावहारिक अनुप्रयोग हैं, जैसे:
- वेब अनुप्रयोगों में अनुरोध संभालना: इसका उपयोग विभिन्न प्रकार के अनुरोधों, जैसे पहचान प्रमाणीकरण, लॉगिंग, और अनुमति सत्यापन को संभालने के लिए किया जा सकता है।
- त्रुटि संभालना: त्रुटियों को संभालने के लिए इसका उपयोग किया जा सकता है, प्रत्येक हैंडलर को विशेष प्रकार की त्रुटि को संभालने के लिए जिम्मेदार बनाकर, त्रुटि को आगे अगर आवश्यक हो तो अगले हैंडलर को भेजता है।
- घटना संभालना: इसका उपयोग विभिन्न प्रकार की घटनाओं, जैसे उपयोगकर्ता क्लिक घटनाएँ, नेटवर्क अनुरोध घटनाएँ, आदि को संभालने के लिए किया जा सकता है।
4. गोलांग में जवाबिलता श्रृंखला पैटर्न का अनुपालन
4.1 यूएमएल कक्षा आरेख
4.2 उदाहरण परिचय
उपरोक्त यूएमएल कक्षा आरेख में, हमने एक सारांश हैंडलर (Handler) और दो concrete handlers (ConcreteHandler1 और ConcreteHandler2) को परिभाषित किया है। ग्राहक (Client) ने हैंडलर के handleRequest विधि को बुलाकर अनुरोध आरंभ किए हैं।
4.3 अंमलन कदम 1: अमूर्त हैंडलर इंटरफेस की परिभाषा
type Handler interface {
HandleRequest(request Request) error
SetNext(handler Handler)
}
type Request interface {
Condition bool
}
सारांश हैंडलर इंटरफेस विधि HandleRequest को प्रसंस्करण के लिए परिभाषित करता है और इसके अगले हैंडलर को सेट करने के लिए विधि SetNext को परिभाषित करता है।
4.4 अंमलन कदम 2: अमूर्त हैंडलर कक्षाओं का अनुपालन
type ConcreteHandler1 struct {
next Handler
}
func (h *ConcreteHandler1) HandleRequest(request Request) error {
// अनुरोध को संभालने के लिए तर्क
if request.Condition {
// अनुरोध को संभालने के लिए कोड
return nil
} else {
if h.next != nil {
return h.next.HandleRequest(request)
}
return errors.New("कोई हैंडलर नहीं मिला")
}
}
func (h *ConcreteHandler1) SetNext(handler Handler) {
h.next = handler
}
type ConcreteHandler2 struct {
next Handler
}
func (h *ConcreteHandler2) HandleRequest(request Request) error {
// अनुरोध को संभालने के लिए तर्क
if request.Condition {
// अनुरोध को संभालने के लिए कोड
return nil
} else {
if h.next != nil {
return h.next.HandleRequest(request)
}
return errors.New("कोई हैंडलर नहीं मिला")
}
}
func (h *ConcreteHandler2) SetNext(handler Handler) {
h.next = handler
}
अमूर्त हैंडलर कक्षाएँ सारांश हैंडलर इंटरफेस को अनुपालन करती हैं और HandleRequest और SetNext विधियों को ओवरराइड करती हैं।
4.5 अंमलन कदम 3: जवाबिलता श्रृंखला का निर्माण
handler1 := &ConcreteHandler1{}
handler2 := &ConcreteHandler2{}
handler1.SetNext(handler2)
कंक्रीट हैंडलर्स को द्वारा उत्पन्न करके और अगले हैंडलर को सेट करके, एक जवाबिलता श्रृंखला निर्मित की जाती है।
4.6 अंमलन कदम 4: ग्राहक कोड
func main() {
handler := &ConcreteHandler1{}
// जवाबिलता श्रृंखला का निर्माण
handler.SetNext(&ConcreteHandler2{})
// एक अनुरोध भेजना
handler.HandleRequest(Request{Condition: true})
}
ग्राहक कोड में, एक कंक्रीट हैंडलर बनाया गया है, अगले हैंडलर सेट किया गया है, और फिर handleRequest विधि को बुलाकर एक अनुरोध भेजा गया है।