توی پست قبلی design pattern های creational رو معرفی کردیم. توی این پست یه معرفی از الگو های طراحی structural داریم. همونطور که گفتم مرجع این پست سایت خوب refactoring هست.
فرض کنید یه سیستم مانیتورینگ بازار سهام دارید. سیستم شما داده هاش رو از چندین منبع با فرمت XMP دریافت میکنه. یه جایی شما تصمیم میگیرید از یه کتابخونه هوشمند تجزیه و تحلیل بازار استفاده کنید. اون کتابخونه دیتاهاش رو با فرمت JSON میده. چیکار میکنیم؟ یه کلاس آداپتور طراحی میکنیم که اطلاعات رو به صورت JSON دریافت کنه و به صورت XML خروجی بده. خیلی خوبه.
وقتایی که آبجکت های ما نیاز به استفاده از interface های ناسازگار دارن این دیزاین پترن میاد به کمک ما.
فرض کنید شما یه کلاس طراحی شکل های هندسی دارید. الان شما دو تا زیر کلاس دایره و مربع دارید. بعدا تصمیم میگیرد دو تا رنگ هم توی کلاستون داشته باشید قرمز و زرد. اگه بخواید همه چیز رو بریزید کف همین کلاستون. باید به جای دو تا زیر کلاس الان چهار تا زیر کلاس داشته باشید. دایره زرد. دایره قرمز. مربع زرد. مربع قرمز. یه جای کار میلنگه. چیکار کنیم؟ میتونیم رنگ ها رو تحت یه interface استخراج کنیم. و کلاس شکلمون رو از اون implement کنیم. در مورد هر کدوم از ابعاد دیگه ای که میخوایم به آبجکت های نهاییمون اضافه کنیم میتونیم همین کارو کنیم.
دیزاین پترن پل به شما امکان می دهد یک کلاس بزرگ رو با تقسیم کردن زیرکلاس ها به دسته هاس نزدیک به هم ساده سازی کنید.
این الگوی طراحی برای ساختار هایی که به صورت درختی قابل پیاده سازی باشن استفاده میشه. بیایم یه مثال بزنیم. فرض کنید یه سیستم فروش و پست دارید. یسری محصول و یسری جعبه. هر جعبه میتونه توش یسری جعبه و یسری محصول دیگه باشه.. قیمت یه بسته بندی رو چجوری حساب کنیم؟ راه حلی که design pattern مرکب به ما میده اینه:
قیمت هر بسته = قیمت محصول (روی هر محصول نوشته شده) + مجموع قیمت محتویات جعبه داخلش. قیمت جعبه ها ی داخلی هم همینطور محاسبه میشه. قیمت محصولات داخل هر جعبه + مجموع قیمت هر جعبه ای که توشه. به تصویر زیر نگاه کنید: