کـــامــپــوزیــت (Composite)
هـــدف
مـسئـــلـه
استفاده از الگوی کامپوزیت فقط زمانی منطقی است که مدل اصلی برنامه شما بتواند به صورت یک درخت نمایش داده شود.
برای مثال، تصور کنید که دو نوع شیء دارید: محصولات و جعبهها. یک جعبه میتواند چندین محصول و همچنین تعدادی جعبه کوچکتر را شامل شود. این جعبههای کوچک نیز میتوانند برخی محصولات یا حتی جعبههای کوچکتر را در خود جای دهند و به همین ترتیب.
فرض کنید تصمیم میگیرید یک سیستم سفارش ایجاد کنید که از این کلاسها استفاده میکند. سفارشها میتوانند محصولات ساده بدون هیچ بستهبندی و همچنین جعبههایی پر از محصولات و جعبههای دیگر را شامل شوند. چگونه قیمت کل چنین سفارشی را تعیین میکنید؟
راهــکــــار
الگوی کامپوزیت پیشنهاد میکند که با محصولات و جعبهها از طریق یک رابط مشترک که متدی برای محاسبه قیمت کل را اعلام میکند، کار کنید.
این روش چگونه کار میکند؟ برای یک محصول، به سادگی قیمت محصول را برمیگرداند. برای یک جعبه، هر آیتم موجود در جعبه را بررسی میکند، قیمت آن را میپرسد و سپس مجموع آن را برای این جعبه برمیگرداند. اگر یکی از این آیتمها یک جعبه کوچکتر بود، آن جعبه نیز شروع به بررسی محتویات خود میکند و همینطور ادامه مییابد تا قیمت تمام اجزای داخلی محاسبه شود. یک جعبه حتی میتواند هزینه اضافی مانند هزینه بستهبندی را به قیمت نهایی اضافه کند.
مقایسه با دنیای واقعی
ارتش اکثر کشورها به صورت سلسله مراتبی سازماندهی شدهاند. یک ارتش شامل چندین لشکر است؛ یک لشکر شامل چندین تیپ است و یک تیپ شامل گروهانهایی است که میتوان آن را به دستهها تقسیم کرد. در نهایت، یک دسته گروه کوچکی از سربازان واقعی است. دستورات از بالای سلسله مراتب داده میشود و به هر سطح منتقل میشود تا هر سرباز بداند چه کاری باید انجام دهد.
ســاخــتـــار