1. میڈیئٹر پیٹرن کیا ہے
میڈیئٹر پیٹرن ایک رویہ طرزیاتی ڈیزائن پیٹرن ہے جو اشیاء کے درمیان سیڑھے راستوں کو کم کر کے ان کی مواصلات کو ایک میڈیئٹر اشیاء کی جانب منتقل کرنے کے ذریعے اندراج کرتا ہے۔ میڈیئٹر پیٹرن میں، اشیاء بہتر اس طرح سے بات چیت نہیں کرتے جیسے کے وہ پہلے کرتے تھے، بلکہ میڈییٹر اشیاء کے ذریعے کرتے ہیں۔
2. میڈیئٹر پیٹرن کی خصوصیات اور فوائد
میڈیئٹر پیٹرن کی خصوصیات اور فوائد مندرجہ ذیل ہیں:
- اشیاء کے درمیان سیدھی رابطہ کو کم کر کے نظام کی پیچیدگی کم کرتا ہے۔
- اشیاء کے درمیان بات چیت کو آسان بنانے کے لئے ایک میڈیئٹر اشیاء کی بات چیت کو سنبھالنے کی اہمیت ہے۔
- اشیاء کے درمیان تعاملات کا انتظام مرکزی بنانے سے اشیاء کو بڑھانے اور صحت مند رکھنے کی سہولت فراہم کرتا ہے۔
3. میڈیئٹر پیٹرن کی حقیقی دنیا کی مثالیں
میڈیئٹر پیٹرن کا استعمال حقیقت میں مختلف مواقع پر ہے۔ مثال کے طور پر، ایک ہوائی اڈے کی شیڈولنگ نظام میں، ڈسپیچر میڈییٹر کی حیت میں آئے گا، جبکہ مختلف ماڈیولز جیسے ہوائی جہاز اور زمینی ٹریفک ایک دوسرے سے بات چیت کرتے ہیں اور ڈسپیچر کے ذریعے تنظیم سے کرتے ہیں۔
4. Golang میں میڈیئٹر پیٹرن کا نمونہ
4.1. UML کلاس Daigram کی تعارف
ذیل میں Golang میں میڈیئٹر پیٹرن کے لئے UML کلاس Daigram ہے:
4.2. نمونہ کا تعارف
اس مثال میں، ہم ایک سادہ چیٹ روم ایپلیکیشن کو میڈیئٹر پیٹرن کا استعمال کرکے مختلف صارفین کے درمیان بات چیت کو سنبھالنے کے لئے بنائیں گے۔
4.3. نمونہ کا تعمیل: میڈیئٹر انٹرفیس اور Concrete میڈیئٹر کی تعریف
پہلے، ہم ایک میڈیئٹر انٹرفیس اور ایک Concrete میڈیئٹر کلاس کی تعریف کریں گے:
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. نمونہ کا تعمیل: ہم ساتھی انٹرفیس اور Concrete ہم ساتھی کی تعریف
اگلے، ہم ایک ہم ساتھی انٹرفیس اور Concrete ہم ساتھی کلاس کی تعریف کرتے ہیں:
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 نے پیغام موصول کیا: %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 نے پیغام موصول کیا: %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. نمونہ کا تعمیل: میڈیئٹر میں ہم ساتھیوں کا انتظام
مخصوص میڈیئٹر کلاس میں، ہمیں registerColleague
میتھوڈ اور sendMessage
میتھوڈ کو ہم ساتھی کلاسز کے درمیان بات چیت کا انتظام کرنے کیلئے عمل کرنا ہوں گے:
func main() {
mediator := &ConcreteMediator{
colleagues: make(map[string]Colleague),
}
colleagueA := &ConcreteColleagueA{
mediator: mediator,
name: "ہم ساتھی A",
}
colleagueB := &ConcreteColleagueB{
mediator: mediator,
name: "ہم ساتھی B",
}
mediator.registerColleague(colleagueA)
mediator.registerColleague(colleagueB)
colleagueA.sendMessage("ہیلو، دنیا!")
colleagueB.sendMessage("ہائے، وہاں!")
}
main
فنکشن میں، ہم ایک مختص میڈیئٹر اشیاء اور دو مختص ہم ساتھی اشیاء بناتے ہیں، پھر انہیں میڈیئٹر اشیاء کے ذریعے رجسٹر کرتے ہیں اور بات چیت کی جانچ پڑتال کرتے ہیں۔