1. کامپوزیٹ پیٹرن کیا ہے
کامپوزیٹ پیٹرن عام طور پر استعمال ہونے والا ایک وسیع اصولی ڈیزائن پیٹرن ہے۔ یہ اشیاء کو ایک درختی ڈھانچے میں مشترک طریقے سے جوڑتا ہے تاکہ ایک درجاتی "حصہ-سب" تعلق کو ظاہر کر سکے اور مآخذ کو انفرادی اجزاء اور شیئر کے ساتھ استعمال کرنے کی ایک ہموار طریقہ فراہم کرتا ہے۔
2. کامپوزیٹ پیٹرن کی خصوصیات اور فوائد
کامپوزیٹ پیٹرن کے اہم فوائد یہ ہیں:
- یہ درجاتیپرانے اجزاء کی وضاحت کرسکتا ہے، جو سارے یا حصے کی شکل میں اجزاء کی ترتیب کو ظاہر کرتا ہے، نئے اجزاء شامل کرنا آسان بناتا ہے۔
- یہ ایک متحدہ انٹرفیس فراہم کرتا ہے، جو کمپوزٹ اجزاء اور انفرادی اجزاء کا رسائی فراہم کرتا ہے، جس سے کلائنٹس کو فرد اور کمپوزٹ اجزاء کو یکساں طور پر استعمال کرنے کی اجازت دیتا ہے۔
3. کامپوزیٹ پیٹرن کے استعمال کے سیناریوز
- جب آپ اشیاء کی حصہ-سب تنظیم کو ظاہر کرنا چاہتے ہیں۔
- جب آپ چاہتے ہیں کہ کلائنٹس کو کمپوزٹ اجزاء اور فرد اجزاء کے درمیان فرق کو نظرانداز کر کے تمام اجزاء کا یکساں طریقے سے استعمال کریں۔
4. گولینگ میں کامپوزیٹ پیٹرن کی تنصیب
فرض کریں ہم ایک ای-کامرس براہ راست ایپلیکیشن تخلیق کر رہے ہیں، تو مصنوعات کی کیٹالوگ یہاں کامپوزیٹ پیٹرن کا ایک بہترین نمونہ ہے۔ ایک زمرہ دوسرے زمرہ کو شامل کر سکتا ہے اور بھی مصنوعات کو (جیسے الیکٹرانکس کا زمرہ فون، کمپیوٹرز کو شامل کرتا ہے، اور فونز کو آئی فون، سیمسنگ فونز شامل ہوتے ہیں وغیرہ)۔
4.1 UML کلاس ڈائیگرام
4.2 مثال کی تعارف
اس مثال میں ہم نے عنصر (واضح طور پر آبجیکٹ اوضاع کی روایت کا ویشالی خصوصیت کا استعمال کرتے ہوئے) کو مشترک اصول کی بنیادی کلاس کے طور پر کیا ہے، اور کامپوزٹ اور پتہ دونوں اس انٹرفیس کو پورا کرتے ہیں، جو کہ محفوظ کرتے ہیں اجزاء اور بنیادی اشیاء کو ظاہر کرتے ہیں۔
4.3 تنصیب مرحلہ 1: بنیادی عنصر کلاس کی تعریف کریں
4.3.1 بنیادی عنصر کلاس کا انٹرفیس تعریف کریں
//Component: بنیادی عنصر انٹرفیس، گروہ اور فرد کی عامیت کی تعریف کرتا ہے
type Component interface {
Search(string)
}
4.3.2 بنیادی عنصر کلاس کے بنیادی میتھڈز کو پورا کریں
یہ مرحلہ خصوصی طور پر کنٹینر عنصر کلاس اور پتہ عنصر کلاس میں اِمکان کے لیے ہوتا ہے۔
4.4 تنصیب مرحلہ 2: پتہ عنصر کلاس کو تعریف کریں
یہ مواد کا کنکرٹ کلاس اس حریفے میں ہوتا ہے کہ یہ ہیرارکی کی زیریں زمرہ یا اشیاء کو ظاہر کرتا ہے اور اس کے پاس اگلا طبقہ کے اشیاء نہیں ہوتے۔
4.4.1 بنیادی عنصر کلاس سے وارث کریں
گو میں انٹرفیس وارثیت کی صورت میں استعمال کرتا ہے جس کے طریقے کو سے متاثرہ کیا ہوتا ہے۔
4.4.2 پتہ عنصر کلاس کے مخصوص میتھڈز کو پورا کریں
//Product: ایک پتہ نوڈ کو ظاہر کرتا ہے، یعنی، ایک مصنوعات، اور اس کے بچے نوڈز نہیں ہوسکتے ہیں
type Product struct {
Name string
}
//Search: مصنوعات کی تلاش کریں
func (p *Product) Search(keyword string) {
if strings.Contains(p.Name, keyword) {
fmt.Printf("Product: '%s' contains keyword: '%s'\n", p.Name, keyword)
}
}
4.5 تنصیب مرحلہ 3: کنٹینر عنصر کلاس کو تعریف کریں
یہ کلاس بچوں اور بچوں کو محفوظ اور منظم کرنے کے لیے استعمال ہوتا ہے، عام طور پر بچوں کے منظم اور بچوں کو سنوارنے کیلئے کچھ میتھڈز کو شامل کرتا ہے، جیسے کہ Add(Component)
، Remove(Component)
وغیرہ۔
4.5.1 بنیادی عنصر کلاس سے وارث کریں
اس کو بھی سٹریکٹ کا استعمال کرتے ہوئے انٹرفیس میتھڈز کو پورا کرنے کے لیے پیش کیا جاتا ہے۔
4.5.2 کنٹینر عنصر کلاس کے مخصوص میتھڈز کو پورا کریں
// Category: ایک کنٹینر نوڈ کو ظاہر کرتا ہے، یعنی، مصنوعات کا زمرہ، جو کہ بچے نوڈز رکھ سکتا ہے
type Category struct {
Name string
Children []Component
}
// Add: ایک بچے نوڈ شامل کریں
func (c *Category) Add(child Component) {
c.Children = append(c.Children, child)
}
// Remove: ایک بچے نوڈ حذف کریں
func (c *Category) Remove(child Component) {
// خصوصی اِمکان کا نظر انداز
}
// Search: مصنوعات کی تلاش کریں
func (c *Category) Search(keyword string) {
fmt.Printf("Category: %s\n", c.Name)
for _, composite := range c.Children {
composite.Search(keyword)
}
}
4.6 تنظیم کرنے کا اسلوب 4: کلائنٹ کوڈ کا مثال
ایک ساخت کو تخلیق دیں، اسے درخت ساختار میں جمع کریں، اور پھر درخت ساختار کا دسترس عمل فراہم کریں۔
func main() {
root := &Category{Name: "Root"}
electronics := &Category{Name: "Electronics"}
phone := &Product{Name: "Phone"}
tv := &Product{Name: "Television"}
root.Add(electronics)
electronics.Add(phone)
electronics.Add(tv)
root.Search("phone") // یہ تمام بچوں میں تلاش کرے گا
}