1. फ्लाईवेट पैटर्न क्या है
1.1 परिभाषा और अवधारणा
फ्लाईवेट पैटर्न एक संरचनात्मक डिज़ाइन पैटर्न है जिसका मुख्य उद्देश्य साझा वस्तुओं की संख्या को कम से कम करके मेमोरी बचाना और प्रदर्शन में सुधार करना होता है। फ्लाईवेट पैटर्न समान या समान वस्तुओं को साझा करके वस्तुओं के निर्माण और उपभोक्ता को कम करता है, प्रदर्शन को सुधारता है।
1.2 अन्य डिज़ाइन पैटर्न से अंतर
अन्य डिज़ाइन पैटर्न के मुकाबले, फ्लाईवेट पैटर्न मुख्य रूप से वस्तुओं को साझा करने और पुनःउपयोग करने पर ध्यान केंद्रित करता है। यह वस्तुओं को साझा करने और मेमोरी उपभोक्ता को कम करने के लिए वस्तुओं को साझा करता है, सिस्टम की कुशलता को सुधारता है।
2. फ्लाईवेट पैटर्न की विशेषताएँ और फायदे
फ्लाईवेट पैटर्न की मुख्य विशेषताएँ और फायदे निम्नलिखित हैं:
- मेमोरी उपयोग का कम होना: यह समान या समान वस्तुओं को साझा करके मेमोरी खपत को कम करता है।
- प्रदर्शन में सुधार: यह वस्तुओं के निर्माण और विनाश को कम करके, सिस्टम के प्रचालन को तेज़ करता है।
- विस्तृत संरचना के समर्थन: यह बड़ी संख्या में सूक्ष्मविभाजित वस्तुओं को बिना बड़े मेमोरी स्थान का अधिकृत विस्तार कर सकता है।
- सिस्टम की संरचना को सरल बनाना: वस्तुओं की आंतरिक और बाह्य स्थितियों को अलग करके, यह सिस्टम की संरचना और जटिलता को सरलता देता है।
3. फ्लाईवेट पैटर्न के व्यावसायिक अनुप्रयोग की उदाहरण
फ्लाईवेट पैटर्न निम्नलिखित परिदृश्यों में लागू किया जा सकता है:
- खेलों में कण वस्तुएँ: प्रत्येक कण वस्तु की गुणवत्ता को आंतरिक और बाह्य स्थितियों में विभाजित किया जा सकता है, और एक ही गुणवत्ता वाली कण वस्तुएँ साझा की जा सकती हैं।
- नेटवर्क सर्वर में कनेक्शन वस्तुएँ: कनेक्शन वस्तुओं की गुणवत्ता को आंतरिक और बाह्य स्थितियों में विभाजित किया जा सकता है, और उपलब्ध कनेक्शन वस्तुओं को पुनःउपयोग किया जा सकता है जब वे पुन: चक्रवात किए जाने से पहले।
4. Golang में फ्लाईवेट पैटर्न का कार्यान्वयन
4.1 UML कक्षा आरेख
गोलांग में फ्लाईवेट पैटर्न का UML कक्षा आरेख निम्नलिखित है:
4.2 उदाहरण परिचय
इस उदाहरण में, हम फ्लाईवेट पैटर्न पर आधारित एक ग्राफिक संपादक बनाएंगे, जिसमें विभिन्न रंगों के वृत्त होंगे, और समान रंग के वृत्तों को साझा करके मेमोरी उपयोग कम करेंगे।
4.3 कार्यान्वयन चरण
4.3.1 फ्लाईवेट इंटरफेस और कंक्रीट फ्लाईवेट कक्षा बनाएं
पहले, हमें Flyweight
इंटरफेस बनाना होगा जिसमें साझा वस्तुओं के ऑपरेशनों को परिभाषित किया जा सकता है। फिर, हम ConcreteFlyweight
कक्षा बना सकते हैं जो Flyweight
इंटरफेस को अमल करती है और आंतरिक स्थितियाँ शामिल करती हैं।
// Flyweight साझा वस्तुओं की इंटरफेस को परिभाषित करता है
type Flyweight interface {
Operation(extrinsicState string)
}
// ConcreteFlyweight वास्तविक साझा वस्तु का प्रतिनिधित्व करता है, Flyweight इंटरफेस को अमल करता है
type ConcreteFlyweight struct {
intrinsicState string
}
// Operation साझा वस्तु का ऑपरेशन विधि को संचालित करता है
func (f *ConcreteFlyweight) Operation(extrinsicState string) {
fmt.Printf("Concrete flyweight object, internal state: %s, external state: %s\n", f.intrinsicState, extrinsicState)
}
4.3.2 FlyweightFactory कक्षा बनाएं
अगले, हम FlyweightFactory
कक्षा बना सकते हैं जो साझा वस्तुओं को प्रबंधित और साझा करने के लिए होती है। यह फैक्टरी कक्षा एक flyweights
डिक्शनरी को बनाए रखती है ताकि बनाए गए फ्लाईवेट वस्तुएँ स्टोर की जा सके।
// FlyweightFactory कक्षा
type FlyweightFactory struct {
flyweights map[string]Flyweight
}
// GetFlyweight फैक्टरी से फ्लाईवेट वस्तु प्राप्त या बनाए गए फ्लाईवेट वस्तु प्राप्त करता है
func (f *FlyweightFactory) GetFlyweight(key string) Flyweight {
if fw, ok := f.flyweights[key]; ok {
return fw
}
flyweight := &ConcreteFlyweight{
intrinsicState: key,
}
f.flyweights[key] = flyweight
return flyweight
}
4.3.3 क्लाइंट कॉल उदाहरण
अंत में, हम एक Client
कक्षा बना सकते हैं जो दिखाती है कि ग्राफिक संपादक को कैसे फ्लाईवेट पैटर्न का उपयोग करने के लिए विशेषज्ञता है।
// Client कक्षा
type Client struct {
flyweight Flyweight
}
// Operation एक ऑपरेशन को संचालित करता है
func (c *Client) Operation() {
c.flyweight.Operation("external state")
}
4.4 कार्यान्वयन ध्यान और सर्वश्रेष्ठ प्रथाएँ
4.4.1 राज्य साझा करना और धागा सुरक्षा
फ्लाईवेट पैटर्न का उपयोग करते समय, आंतरिक स्थिति को साझा करने और धागा सुरक्षा पर ध्यान दिया जाना चाहिए। क्योंकि फ्लाईवेट ऑब्जेक्ट कई ग्राहकों द्वारा साझा किए जाते हैं, इसलिए आंतरिक स्थिति की संरचना को सुनिश्चित करना आवश्यक है।
4.4.2 ऑब्जेक्ट पूल प्रबंधन
फ्लाईवेट ऑब्जेक्ट को बेहतरीन तरीके से प्रबंधित और पुनःउपयोग के लिए, ऑब्जेक्ट पूल का उपयोग किया जा सकता है जिसमें बनाए गए फ्लाईवेट ऑब्जेक्ट संग्रहीत होते हैं। ऑब्जेक्ट पूल ऑब्जेक्ट का पुनर्प्रयोग दर बढ़ा सकते हैं और ऑब्जेक्ट निर्माण और नाश के ओवरहेड को कम कर सकते हैं।