کامپوزیت mahdi.sg مرداد ۲۶, ۱۴۰۳

کـــامــپــوزیــت (Composite)

همچنین به عنوان: درخت شیء شناخته می شود.

هـــدف
کامپوزیت یک الگوی طراحی ساختاری است که به شما امکان می‌دهد اشیاء را در ساختارهای درختی بنویسید و سپس با این ساختارها طوری کار کنید که گویی یک اشیاء جداگانه هستند.
Composite design pattern
مـسئـــلـه

استفاده از الگوی کامپوزیت فقط زمانی منطقی است که مدل اصلی برنامه شما بتواند به صورت یک درخت نمایش داده شود.

برای مثال، تصور کنید که دو نوع شیء دارید: محصولات و جعبه‌ها. یک جعبه می‌تواند چندین محصول و همچنین تعدادی جعبه کوچک‌تر را شامل شود. این جعبه‌های کوچک نیز می‌توانند برخی محصولات یا حتی جعبه‌های کوچک‌تر را در خود جای دهند و به همین ترتیب.

فرض کنید تصمیم می‌گیرید یک سیستم سفارش ایجاد کنید که از این کلاس‌ها استفاده می‌کند. سفارش‌ها می‌توانند محصولات ساده بدون هیچ بسته‌بندی و همچنین جعبه‌هایی پر از محصولات و جعبه‌های دیگر را شامل شوند. چگونه قیمت کل چنین سفارشی را تعیین می‌کنید؟

Structure of a complex order

یک سفارش ممکن است شامل محصولات مختلفی باشد، بسته بندی شده در جعبه،
بسته بندی شده در جعبه های بزرگتر و غیره. کل ساختار شبیه یک درخت وارونه است.
می‌توانید رویکرد مستقیم را امتحان کنید: همه جعبه‌ها را باز کنید، تمام محصولات را مرور کنید و سپس کل قیمت را محاسبه کنید. این کار در دنیای واقعی امکان‌پذیر است؛ اما در یک برنامه، به سادگی اجرای یک حلقه نیست. شما باید از قبل کلاس‌های محصولات و جعبه‌هایی که در حال بررسی هستید، سطح تو در توی جعبه‌ها و سایر جزئیات ناخوشایند را بدانید. همه این‌ها رویکرد مستقیم را یا بسیار دست و پا گیر یا حتی غیرممکن می‌کند.

الگوی کامپوزیت پیشنهاد می‌کند که با محصولات و جعبه‌ها از طریق یک رابط مشترک که متدی برای محاسبه قیمت کل را اعلام می‌کند، کار کنید.

این روش چگونه کار می‌کند؟ برای یک محصول، به سادگی قیمت محصول را برمی‌گرداند. برای یک جعبه، هر آیتم موجود در جعبه را بررسی می‌کند، قیمت آن را می‌پرسد و سپس مجموع آن را برای این جعبه برمی‌گرداند. اگر یکی از این آیتم‌ها یک جعبه کوچک‌تر بود، آن جعبه نیز شروع به بررسی محتویات خود می‌کند و همینطور ادامه می‌یابد تا قیمت تمام اجزای داخلی محاسبه شود. یک جعبه حتی می‌تواند هزینه اضافی مانند هزینه بسته‌بندی را به قیمت نهایی اضافه کند.

Solution suggested by the Composite pattern

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

An example of a military structure

نمونه‌ای از ساختار نظامی.

ارتش اکثر کشورها به صورت سلسله مراتبی سازماندهی شده‌اند. یک ارتش شامل چندین لشکر است؛ یک لشکر شامل چندین تیپ است و یک تیپ شامل گروهان‌هایی است که می‌توان آن را به دسته‌ها تقسیم کرد. در نهایت، یک دسته گروه کوچکی از سربازان واقعی است. دستورات از بالای سلسله مراتب داده می‌شود و به هر سطح منتقل می‌شود تا هر سرباز بداند چه کاری باید انجام دهد.

ســاخــتـــار

 

Structure of the Composite design pattern
برای مطـالعـه متن کامل مقالــه، مجموعه کــــدها، نحوه پیاده سازی، مزایا و معایب و روابط با الگوهای دیگر، ایــنــجـــا کلیک کنید.