1. फ़ैक्टरी मेथड पैटर्न क्या है

फ़ैक्टरी मेथड पैटर्न एक सृजनात्मक डिज़ाइन पैटर्न है जो उपकला क्लास में ऑब्जेक्ट बनाने की प्रक्रिया को उपकला बनाने वाले सबक्लास में एन्कैप्स्यूलेट करने का तरीका प्रदान करता है। इस तरह, क्लाइंट को विशिष्ट ऑब्जेक्ट निर्माण प्रक्रिया की चिंता किए बिना फैक्टरी मेथड को कॉल करके ऑब्जेक्ट बना सकते हैं।

2. फ़ैक्टरी मेथड पैटर्न की विशेषताएँ और फायदे

फ़ैक्टरी मेथड पैटर्न की विशेषताएँ निम्नलिखित हैं:

  • ऑब्जेक्ट के निर्माण और उपयोग को अलग करना, जहां क्लाइंट को केवल फैक्टरी मेथड और ऑब्जेक्ट इंटरफ़ेस की चिंता करने की आवश्यकता होती है।
  • नए विशिष्ट फैक्टरी क्लासें और विशिष्ट उत्पाद क्लासों को जोड़कर, सुरक्षित/बंद प्रिंसिपल को अनुसरण करना, ताकि सिस्टम में विस्तार किया जा सके।

फ़ैक्टरी मेथड पैटर्न के फायदे निम्नलिखित हैं:

  • ऑब्जेक्ट निर्माण प्रक्रिया को एन्कैप्स्यूलेट करके, सिस्टम को और अधिक छवियान और विस्तारशील बनाता है।
  • विशिष्ट उत्पाद क्लासों की अंतर्निहित विवरणों को छिपाने से, क्लाइंट की आधारिकता और जुड़ाव कम होती है और विशिष्ट क्लासेस के प्रति निर्भरता कम होती है।
  • उत्पादों को तैयार करने का एक मानकीकृत तरीका प्रदान करना, सिस्टम की रख-रखाव और विस्तार को सरल बनाना।

3. फ़ैक्टरी मेथड पैटर्न के आवेदन संदर्भ

फ़ैक्टरी मेथड पैटर्न निम्नलिखित संदर्भों के लिए उपयुक्त है:

  • क्लाइंट विशिष्ट उत्पाद क्लासों पर निर्भर नहीं करता है, बल्कि आधार स्तरीय उत्पाद इंटरफ़ेस पर निर्भर होता है।
  • क्लाइंट को विभिन्न स्थितियों पर आधारित रूप में विभिन्न उत्पाद ऑब्जेक्ट डायनेमिक रूप से निर्मित करने की आवश्यकता होती है।
  • उत्पाद ऑब्जेक्ट निर्माण प्रक्रिया को एन्कैप्स्यूलेट और छुपाने की आवश्यकता है।

4. गोलांग में फ़ैक्टरी मेथड पैटर्न का अमल

4.1 UML क्लास विशेषघटना

Golang Factory Method Pattern

4.2 अमल कदम 1: ऑब्जेक्ट इंटरफ़ेस का परिभाषा करें

package factory

// Product यह एक ऑब्जेक्ट इंटरफ़ेस है
type Product interface {
	Operation() string
}

4.3 अमल कदम 2: कंक्रीट उत्पाद अंतर्गत करने की कंक्रीट उत्पाद अंतरगत करने की कंक्रीट उत्पाद कार्यान्वयन क्लासें बनाएं

package factory

// ConcreteProductA कंक्रीट उत्पाद क्लास A है
type ConcreteProductA struct{}

// Operation कंक्रीट उत्पाद A क्लास की विधि है
func (p *ConcreteProductA) Operation() string {
	return "ConcreteProductA"
}

// ConcreteProductB कंक्रीट उत्पाद क्लास B है
type ConcreteProductB struct{}

// Operation कंक्रीट उत्पाद B क्लास की विधि है
func (p *ConcreteProductB) Operation() string {
	return "ConcreteProductB"
}

4.4 अमल कदम 3: ऑब्जेक्ट इंटरफ़ेस की परिभाषा करें

package factory

// Factory यह एक अभ्यास फैक्टरी इंटरफ़ेस है
type Factory interface {
	CreateProduct() Product
}

4.5 अमल कदम 4: कंक्रीट फैक्टरी कार्यान्वयन क्लासें बनाने की परिभाषा करें

package factory

// ConcreteFactoryA कंक्रीट फैक्टरी क्लास A है
type ConcreteFactoryA struct{}

// CreateProduct कंक्रीट फैक्टरी A क्लास की विधि है
func (f *ConcreteFactoryA) CreateProduct() Product {
	return &ConcreteProductA{}
}

// ConcreteFactoryB कंक्रीट फैक्टरी क्लास B है
type ConcreteFactoryB struct{}

// CreateProduct कंक्रीट फैक्टरी B क्लास की विधि है
func (f *ConcreteFactoryB) CreateProduct() Product {
	return &ConcreteProductB{}
}

4.6 अमल कदम 5: क्लाइंट फैक्टरी मेथड को निर्माण ऑब्जेक्ट बनाने के लिए कार्यान्वित करता है

package main

import (
	"fmt"
	"github.com/your/package/factory
)

func main() {
	// कंक्रीट फैक्टरी A बनाएं
	factoryA := &factory.ConcreteFactoryA{}
	// फैक्टरी मेथड को कॉल करके विशिष्ट उत्पाद ऑब्जेक्ट बनाएं
	productA := factoryA.CreateProduct()
	fmt.Println(productA.Operation())

	// कंक्रीट फैक्टरी B बनाएं
	factoryB := &factory.ConcreteFactoryB{}
	// फैक्टरी मेथड को कॉल करके विशिष्ट उत्पाद ऑब्जेक्ट बनाएं
	productB := factoryB.CreateProduct()
	fmt.Println(productB.Operation())
}