الگویِ طراحیِ Mediator (جاوا و کاتلین)

خیلی اوقات ما کد‌هایی شامل اشیایی می‌نویسیم که با هم در ارتباطند ، اگر این ارتباطات پیچیده و زیاد باشند بعدا سرِ تغییرات یا ... دچار مشکل می‌شیم ، پس نیاز به یک واسطه داریم که بین دو شئ قرار بگیره ، کلمه Mediate به معنی "میناجی گری کردن" یا "وساطت کردن" و Mediator یعنی "واسطه" ، این الگو جزء Behavioral ها حساب میشه .

همون طور که در شکل می‌بینیند دو کلاس مشتق شده از Colleague قراره با هم همکاری داشته باشند و Mediator این همکاری رو برقرار می‌کنه ، در Mediator متدهای مورد نظر و در ConcreteMediator پیاده‌سازی اون‌ها انجام میشه ، Colleague یک Mediator رو به عنوان ورودی می‌گیره و دارای متد‌های Abstract هست که در ConcreteColleague ها پیاده‌سازی شدند ، مثالی که اکثرا در مقالات برای Mediator میارن ، مثالِ برجِ مراقبت هست که بین هواپیماها واسطه میشه و به اون‌ها اجازه فرود و پرواز و ... می‌ده .

صورت مساله

دو قسمت سخت افزاری در یک سیستم قرار هست به هم پیامی ارسال کنند ، با Mediator این پیاده‌سازی رو انجام می‌دیم .

در مرحله اول Mediator و Hardware (یا همون Colleague) رو می‌نویسیم ، Mediator تابعی به نام send داره که یک پیغام به همراه گیرنده و فرستنده رو ورودی داره ، Hardware یک تابع با نام sendMessage داره که پیاده سازش رو انجام میدیم اما تابع receiveMessage رو به صورت abstract در می‌آریم که در هر کلاسی که از Hardware مشتق شده فرق کنه (البته در کد ما فرقی نمی‌کنه)

https://gist.github.com/sasssass/ed2eb95df479690003900e40bee568a7

در مرحله بعدی کلاس‌هایی که از این دو کلاس مشتق شدن رو پیاده‌سازی می‌کنیم ، دو کلاس Ram و Cpu از Hardware مشتق شده‌اند :

https://gist.github.com/sasssass/021d824cd30ab60c4b3a56ee60572776

و در آخر در کدِ Client ازشون استفاده می‌کنیم :

https://gist.github.com/sasssass/b8f211fec9241c0cfe60cbef2d92fe2a

باقی مقالات در مورد الگوی‌های طراحی رو در این مقاله بخونید .

من رو در لینکدین و اینستاگرام دنبال کنید ???

اگه دوست داشتید می‌تونید به صفحه Spotify بنده هم برید و موسیقی های منو گوش بدید ???