1. কম্পোজিট প্যাটার্ন কি
কম্পোজিট প্যাটার্ন একটি সাধারণভাবে ব্যবহৃত অবজেক্ট গঠনা উপায়। এটি অবজেক্টগুলি একটি গাছের গঠনে মেশান করে যা বৃহত্তর "অংশ-পূরূণ" সম্পর্ক প্রকাশ করে এবং গ্রাহকদের একক অবজেক্ট এবং অবজেক্ট সম্পোষণগুলি একইভাবে তিনিষ্ঠিত করে তা ব্যবহার করার ব্যাপারে কার্যকরভাবে করে।
2. কম্পোজিট প্যাটার্নের বৈশিষ্ট্য এবং সুবিধা
কম্পোজিট প্যাটার্নের প্রধান সুবিধা হল:
- এটি স্পষ্টভাবে হায়ারারকি জটিল অবজেক্টগুলি সংজ্ঞায়িত করতে পারে, সমস্ত অথবা অংশগুলি প্রতিযোগী করতে সহায়ক করতে।
- এটি একটি যৌথ ইন্টারফেস সরবরাহ করে, কম্পোজিট অংশ এবং সিংগেল অবজেক্টগুলিকে অধিক প্রাপ্ত করতে, গ্রাহকদের সম্পূর্ণরূপে ব্যবহার করতে সক্ষম করে।
3. কম্পোজিট প্যাটার্নের অনুযায়ী প্রয়োগের প্রস্তাব
- যখন আপনি অবজেক্টগুলির অংশ-পূরূণ হায়ারারকি প্রমাণ্য করতে চান।
- যখন আপনি চান গ্রাহকদের কম্পোজিট অংশ এবং একক অবজেক্টগুলির মধ্যে পার্থক্যগুলি উপেক্ষা করা এবং সমস্ত অবজেক্ট সম্পূর্ণরূপে ব্যবহার করতে আপনি চান।
4. গোল্যাংতে কম্পোজিট প্যাটার্নের প্রয়োজনীয়তা
ধরা যাক আমরা একটি ই-কমার্স অ্যাপ্লিকেশন ডিজাইন করছি, পণ্য ক্যাটালগ হল কম্পোজিট প্যাটার্নের একটি ভাল উদাহরণ। একটি বিভাগ অন্যান্য বিভাগ এবং পণ্যগুলি কে ধরে পালন করতে পারে, (উদাহরণস্বরূপ, ইলেকট্রনিক্স বিভাগ ফোন, কম্পিউটার ধরে পালন করে, এবং ফোন অ্যাপুল, স্যামসাং ফোন কে ধরে পালন করে)।
4.1 UML ক্লাস ডায়াগ্রাম
4.2 উদাহরণ পরিচিতি
এই উদাহরণে, আমরা Component
(প্রকৃতপক্ষে অবজেক্ট অর্থনীতির ইন্টারফেস বৈশিষ্ট্যটি ব্যবহার করে) একটি প্রতিষ্ঠিত বেস ক্লাস হিসেবে ব্যবহার করে, এবং Composite
এবং Leaf
উভয়ই এই ইন্টারফেস আমাল করে, যা সাংঘটিক অব্জেক্ট এবং মৌলিক অবজেক্টগুলি প্রতিরূপ করে।
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' একটি কীওয়ার্ড সহে থাকে: '%s'\n", p.Name, keyword)
}
}
4.5 অনুসঙ্গ পদক্ষেপ 3: পাত্র অংশ ক্লাস সংজ্ঞায়িত করুন
এই ক্লাসটি ব্যবহার করা হয় যেখানে শিশু অবজেক্ট সংরক্ষণ এবং পরিচালনা করা হয়, সাধারণভাবে কিছু বাচ্চাদের ব্যবস্থাপনা এবং বিভিন্ন শিশু অবজেক্টের জন্য কিছু পদক্ষেপ বিশেষত তিন্ষ্ঠিত আছে, যেমন যোগ (পাত্র)
, অপসারণ (পাত্র)
, ইত্যাদি।
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 _, সহযোগী := range c.Children {
সহযোগী.Search(keyword)
}
}
4.6 অনুমাননা পদক্ষেপ 4: ক্লায়েন্ট কোড উদাহরণ
একটি স্ট্রাকচার তৈরি করুন, এটি একটি বৃক্ষ স্ট্রাকচারে সংযুক্ত করুন, এবং তারপর বৃক্ষ স্ট্রাকচারের অ্যাক্সেস অপারেশনটি কল করুন।
func main() {
root := &Category{Name: "মূল"}
electronics := &Category{Name: "ইলেকট্রনিক্স"}
phone := &Product{Name: "ফোন"}
tv := &Product{Name: "টেলিভিশন"}
root.Add(electronics)
electronics.Add(phone)
electronics.Add(tv)
root.Search("phone") // এটি সমস্ত শিশুদের মধ্যে অনুসন্ধান করবে
}