genix
دیزاین پترن Composite چیست؟ 🫵
الگوی طراحی Composite، یک الگوی طراحی structural هست که به شما امکان میده اشیاء رو در ساختارهای درخت مانند بنویسید تا سلسله مراتب بخشی از کل رو نشون بده. این به کلاینت(مشتری ها) اجازه میده تا با اشیاء و ترکیبات اشیا به طور یکنواخت رفتار کنن. به عبارت دیگه چه با یک شی منفرد و چه با گروهی از اشیا (کامپوزیت)، مشتریان میتونن به جای یکدیگر از اون ها استفاده کنن.
الگوی طراحی کامپوزیت چه مشکلاتی رو میتونه حل کنه؟ 🧸
* یک سلسله مراتب بخشی از کل باید نشان داده بشه تا کلاینت ها بتونن با اشیاء جزئی و کل به طور یکنواخت رفتار کنن.
* سلسله مراتب بخشی از کل، باید به عنوان ساختار درختی نشان داده بشه.
الگوی طراحی کامپوزیت چه راه حلی را توصیف می کند؟
* یک رابط کامپوننت یکپارچه برای اشیاء قسمت (برگ) و اشیاء کل (کامپوزیت) تعریف میکنین.
* اشیاء Leaf منفرد رابط Component رو مستقیماً پیاده سازی میکنن و اشیاء Composite درخواست ها رو به مؤلفه های فرزندشون ارسال میکنن.
شاید درکش در نگاه اول سخت باشه برای همین یک منوی رستوران رو تصور کنید، که با استفاده از الگوی طراحی کامپوزیت ارائه شده.
1. MenuItem (Interface): این رابط پایه هست که عملیات مشترک رو برای همه آیتم های منو تعریف میکنه. میتونه شامل متدهایی مثل «getName()»، «getPrice()» و «getDescription()» باشه.
2. Leaf (Concrete Class): این یک آیتم منوی واحد مثل "برگر" یا "سالاد" رو نشون میده. «MenuItem» رو پیادهسازی میکنه و پیادهسازیهای مشخصی رو برای متد های خود فراهم میکنه و جزئیات خاص اون آیتم رو برمیگردونه.
3. Composite (Concrete Class): این نشون دهنده یک دسته در منو مثل پیش غذاها هست. "MenuItem" رو پیاده سازی میکنه اما جزئیات خاص خود رو نداره. درعوض، فهرستی از مؤلفههای فرزند (سایر موارد «MenuItems» که میتونه هم «برگ» و هم دیگر اشیاء «کامپوزیت» باشن رو در خود داره. متد های رابط رو با تکرار از طریق مؤلفههای فرزند خود و تفویض تماس به روشهای مربوطه اجرا میکنه. برای مثال، «getPrice()» قیمت کل رو با جمع کردن قیمتهای همه اقلام فرزند خود محاسبه میکنه.
به صورت کلی این پترن هم مثل پترن های دیگه در شرایط خاص ممکنه کاربردی باشه. برای اطلاعات بیشتر به این مقالات مراجعه کنید:
- Article
- Article
- Article
#design_pattern
@CodeModule
5 · 1.4K ·