1. মিডিয়েটর প্যাটার্ন কি
মিডিয়েটর প্যাটার্ন হল একটি আচরণশীল ডিজাইন প্যাটার্ন, যা অবজেক্টগুলির মধ্যে সরাসরি নির্ভরতা কমানোর মাধ্যমে তাদের যোগাযোগকে একটি মিডিয়েটর অবজেক্টে সরবরাহ করে। মিডিয়েটর প্যাটার্নে, অবজেক্টগুলি আর সরাসরি একে অপরের সাথে যোগাযোগ করে না, বরং মিডিয়েটর অবজেক্টের মাধ্যমে যোগাযোগ করে।
2. মিডিয়েটর প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাগুলি
মিডিয়েটর প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাগুলিঃ
- অবজেক্টগুলির মধ্যে সরাসরি জোড়াবদ্ধতা কমিয়ে নেয়, যা সিস্টেমের জটিলতা কমায়।
- অবজেক্টগুলির মধ্যে যোগাযোগকে সহজে করে তোলার মাধ্যমে মিডিয়েটর অবজেক্টটি তাদের যোগাযোগ হ্যান্ডেল করে।
- অবজেক্টগুলির মধ্যে সম্পর্কের নিয়ন্ত্রণ কেন্দ্রীয়করণ করে, এক্সটেনশন এবং মেনটেন্স সহজ করে।
3. মিডিয়েটর প্যাটার্নের প্রাকৃতিক প্রয়োগ
মিডিয়েটর প্যাটার্নের প্রাকৃতিক প্রয়োগের অনেক উদাহরণ রয়েছে। উদাহরণস্বরূপ, একটি বিমানবন্দর অনুস্ড়িতি ব্যবস্থায়, ডিস্প্যাচারটি মিডিয়েটর হিসেবে কর্মরত করে, যখন বিভিন্ন মডিউল যেমন বিমান এবং গ্রাউন্ড ট্র্যাফিক সহকর্মী ক্যালেগ ক্লাস এবং ডিস্প্যাচারের মাধ্যমে যোগাযোগ করে এবং সময় নির্ধারণ করে।
4. গোল্যাংয় মিডিয়েটর প্যাটার্নের অনুপ্রণিতিকরণ
4.1 ইউএমএল ক্লাস ডায়াগ্রামের পরিচিতি
নিচে গোল্যাংয়ে মিডিয়েটর প্যাটার্নের জন্য ইউএমএল ক্লাস ডায়াগ্রাম দেখুন:
4.2 উদাহরণের পরিচিতি
এই উদাহরণে, আমরা মিডিয়েটর প্যাটার্ন ব্যবহার করে একটি সহজ চ্যাট রুম অ্যাপ্লিকেশন আমল করব। যেখানে বিভিন্ন ব্যবহারকারীদের মধ্যে যোগাযোগ পরিচালনা করা হবে।
4.3 বৈশিষ্ট্য Step 1: মিডিয়েটর ইন্টারফেস এবং কনক্রিট মিডিয়েটর সংজ্ঞায়িত করা
প্রথমে, আমরা একটি মিডিয়েটর ইন্টারফেস এবং একটি কনক্রিট মিডিয়েটর ক্লাস সংজ্ঞায়িত করি:
type Mediator interface {
registerColleague(colleague Colleague)
sendMessage(message string, colleague Colleague)
}
type ConcreteMediator struct {
colleagues map[string]Colleague
}
func (m *ConcreteMediator) registerColleague(colleague Colleague) {
m.colleagues[colleague.getName()] = colleague
}
func (m *ConcreteMediator) sendMessage(message string, colleague Colleague) {
for _, c := range m.colleagues {
if c != colleague {
c.receiveMessage(message)
}
}
}
4.4 বৈশিষ্ট্য Step 2: কলীগ ইন্টারফেস এবং কনক্রিট কলিগ সংজ্ঞায়িত করা
পরবর্তী, আমরা একটি কলিগ ইন্টারফেস এবং কনক্রিট কলিগ ক্লাস সংজ্ঞায়িত করি:
type Colleague interface {
receiveMessage(message string)
sendMessage(message string)
getName() string
}
type ConcreteColleagueA struct {
mediator Mediator
name string
}
func (c *ConcreteColleagueA) receiveMessage(message string) {
fmt.Printf("%s received message: %s\n", c.name, message)
}
func (c *ConcreteColleagueA) sendMessage(message string) {
c.mediator.sendMessage(message, c)
}
func (c *ConcreteColleagueA) getName() string {
return c.name
}
type ConcreteColleagueB struct {
mediator Mediator
name string
}
func (c *ConcreteColleagueB) receiveMessage(message string) {
fmt.Printf("%s received message: %s\n", c.name, message)
}
func (c *ConcreteColleagueB) sendMessage(message string) {
c.mediator.sendMessage(message, c)
}
func (c *ConcreteColleagueB) getName() string {
return c.name
}
4.5 বৈশিষ্ট্য Step 3: মেডিয়েটরে ব্যবহারকারী পরিচালনা করা
নির্দিষ্ট মিডিয়েটর ক্লাসে, আমাদের প্রতিষ্ঠাতা কলিগ মেথড এবং ক্লিগ করার মাধ্যমে কলিগ পরিবর্তন ব্যবহারের ম্থডগুলি অনুরোধ করতে হবে:
func মেন__() {
মিডিয়েটর := &ConcreteMediator{
colleagues: make(map[string]Colleague),
}
colleagueA := &ConcreteColleagueA{
mediator: mediator,
name: "Colleague A",
}
colleagueB := &ConcreteColleagueB{
mediator: mediator,
name: "Colleague B",
}
mediator.registerColleague(colleagueA)
mediator.registerColleague(colleagueB)
colleagueA.sendMessage("Hello, World!")
colleagueB.sendMessage("Hi, there!")
}
মেন__
ফাংশনে, আমরা একটি নির্দিষ্ট মিডিয়েটর অবজেক্ট এবং দুটি নির্দিষ্ট কলিগ অবজেক্ট তৈরি করে, এরপর মিডিয়েটর অবজেক্টের মাধ্যমে কলিগ অবজেক্টগুলি নিবন্ধন করে এবং যোগাযোগ পরীক্ষা করে।