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

خیلی وقت‌ها شما شما یک سیستم پیچیده پیاده‌سازی کردید و نیاز دارید پیچیدگی اون سیستم رو از کد قسمت دیگه‌ای مخفی کنید ، یکی از کاربرد‌های الگویِ Facade در این زمینه هست !

معنی لغوی Facade به معنی "نَما" هست ، پس شما کاری که می‌کنید اینه که یک نما از سیستم به کدتون می‌دید و این نما شامل توابع مورد نیازتون هست ، یکی از کتاب‌خانه‌های مشهور اندروید که از این الگو استفاده می‌کنه Retrofit هست که شما دیگه کاری با پیچیدگی پیاده‌سازی توابع مربوطه ندارید و صرفا با گرفتن instance از Retrofit به توابع مورد نظرتون دسترسی دارید ، ممکنه دقیق متوجه حرف‌های من نشده باشید پس به این تصویر نگاه کنید :

Facade
Facade

این شکل یک شکلِ مینیمال از آنچه اتفاق می‌افتد است ، ماژول‌های مختلف با هم تعامل دارند و یک سیستم رو تشکیل می‌دهند و اگر ما بخوایم ازشون تو کد استفاده کنیم کارمون خیلی سخت میشه پس نیاز داریم کلاسی به اسم Facade بسازیم تا نماینده و نَمای کل اون سیستم برای ما باشه ، این الگو جزوِ Structural ها حساب میشه .

صورت مساله

سیستمِ پخشِ موسیقی‌ای داریم که شامل یک موزیک پلیر ، یک نمایشگر و باند است ، سیستم به این شکل تعریف شده که زمانی که موسیقی در حال پخش بود اطلاعات درون نمایشگر نشان داده شود و از باند پخش شود ، از طریق نمایشگر می‌توانیم موسیقی رو کنترل کنیم ، همین طور باید دقت کنیم که موزیک پلیر و اسپیکر فقط در حالتی کار می‌کنند که روشن باشند ، این روشن بودن را نیز مانیتور کنترل می‌کنید ، یک سیستم پیچیده ! کلاسی خواهیم ساخت که نماینده کلِ این سیستم برای ما باشد .

اول از همه سه کلاس MusicPlayer ، Screen و Speaker رو ایجاد می‌کنیم :

https://gist.github.com/sasssass/f3f50e5a0edca84a5e1d4e781ae868e9
https://gist.github.com/sasssass/7f009c3903340b7f664b59a31159240a
https://gist.github.com/sasssass/622e7b70e31ad27c56bf9dc056639f0a

حالا نیاز به یک کلاس با الگویِ Facade داریم که خلاصه آنچه ما نیاز داریم را برای ما تهیه کنید ، ما در این کلاس فقط نیاز داریم : 1.آهنگ پخش کنیم 2.کلِ سیستم را خاموش کنیم :

https://gist.github.com/sasssass/10a4de1a27405b6a91316ce21724e7eb

و این طوری پیچیدگی کلِ سیستم از کدِ Client پنهان می‌مونه :

https://gist.github.com/sasssass/958bb1fb0221c97e95f3409ca6200f13

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

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

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