1. فیکٹری میتھڈ پیٹرن کیا ہے
فیکٹری میتھڈ پیٹرن ایک تخلیقی ڈیزائن پیٹرن ہے جو ذیلی کلاسوں میں اشیاء کی تخلیق کی پروسس کو قابو میں رکھنے کا ایک طریقہ فراہم کرتا ہے۔ اس طریقے سے، گاہک کو خاص شے کی تخلیقی پروسس کے بارے میں پریشان ہوئے بغیر فیکٹری میتھڈ کو بلانے کے ذریعہ اشیاء بنا سکتا ہے۔
2. فیکٹری میتھڈ پیٹرن کی خصوصیات اور فوائد
فیکٹری میتھڈ پیٹرن کی خصوصیات میں شامل ہیں:
- اشیاء کی تخلیق اور استعمال کا رابطہ ختم کرنا، جہاں گاہک کو صرف فیکٹری میتھڈ اور ایبسٹریکٹ پروڈکٹ انٹرفیس کے بارے میں فکر کرنے کی ضرورت ہوتی ہے۔
- نظام کو نئے خصوصی فیکٹری کلاسوں اور خصوصی پروڈکٹ کلاسوں کو شامل کر کے بڑھایا جا سکتا ہے، کھلے/بند اصول کے مطابق۔
فیکٹری میتھڈ پیٹرن کے فوائد میں شامل ہیں:
- اشیاء کی تخلیقی پروسس کو قابو میں رکھنا، جو نظام کو زیادہ لچکدار اور وسیع بناتا ہے۔
- خصوصی پروڈکٹ کلاسوں کی تفصیلات کو چھپانا، گاہک کی یکسانیت اور خصوصی کلاسوں کے رابطے کو کم کرکے۔
- پروڈکٹس کی تخلیق کے لئے معیاری طریقے فراہم کرنا، جو نظام کی مرمت اور بڑھوا کو آسان بناتا ہے۔
3. فیکٹری میتھڈ پیٹرن کی درخواست سیٹیاں
فیکٹری میتھڈ پیٹرن مندرجہ ذیل سیکیشنز کے لئے موزوں ہے:
- گاہک خصوصی پروڈکٹ کلاسوں پر منحصر نہیں ہے، بلکہ ابسٹریکٹ پروڈکٹ انٹرفیس پر منحصر ہے۔
- گاہک کو مختلف حالات کے مطابق مختلف پروڈکٹ اشیا دوبارہ تخلیق کرنے کی ضرورت ہے۔
- پروڈکٹ کی تخلیقی اور چھپائی کی پروسس کو چھپانے اور مخفی کرنے کی ضرورت ہے۔
4. فیکٹری میتھڈ پیٹرن کی گولانگ میں تنصیب
4.1 UML کلاس ڈائیگرام
4.2 تنصیب اسٹیپ 1: ایبسٹریکٹ پروڈکٹ انٹرفیس کی تعریف
package factory
// پروڈکٹ ایبسٹریکٹ پروڈکٹ انٹرفیس ہے
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())
}
مذکورہ بالا کوڈ میں، ہم نے ایبسٹریکٹ پروڈکٹ انٹرفیس Product
اور کنکریٹ پروڈکٹ کلاسز ConcreteProductA
اور ConcreteProductB
کی تعریف کرتے ہیں۔ پھر، ہم نے ایبسٹریکٹ فیکٹری انٹرفیس Factory
اور کنکریٹ فیکٹری کلاسز ConcreteFactoryA
اور ConcreteFactoryB
کی تعریف کی ہے۔ گاہک، کنکریٹ فیکٹری کے تھیکی میتھڈ کو بلانے کے ذریعہ مخصوص پروڈکٹ اشیاء بنا سکتا ہے، جو کے فیکٹری میتھڈ پیٹرن کے تنصیب کو نافذ کرتا ہے۔
مذکورہ بالا مواقعت کے ساتھ ہم نے گولانگ میں فیکٹری میتھڈ پیٹرن کے تنصیب کو مکمل کر لیا ہے۔ یہ دستاویز گاہک کو خصوصی پروڈکٹ کلاسز سے علیحدہ کرتا ہے، جو گاہک کو صرف ابسٹریکٹ پروڈکٹ انٹرفیس پر توجہ دینے دیتا ہے۔ اسی دوران، مخصوص پروڈکٹ کلاسز کی تفصیلات کو کنکریٹ فیکٹری کلاس میں چھپایا گیا ہے، جس سے نظام زیادہ لچکدار اور وسیع ہوتا ہے۔ فیکٹری میتھڈ پیٹرن عمل میں کافی عام ہوتا ہے، خاص طور پر ان مواقع پر جہاں مختلف اقسام کی اشیاء کی متحرک تخلیق کی ضرورت ہوتی ہے، جو کے کوڈ کی دوبارہ استعمالیت اور مرمت میں اہمیت ہوتی ہے۔