دیزاین پترن (Design Patterns) یا الگوهای طراحی نرمافزار، راهحلهای شناختهشده و قابل تکرار برای مسائل متداول طراحی آبجکتگرا هستند. پترن، کد آماده برای Copy/Paste نیست. مسئله، شرایط استفاده، ساختار همکاری آبجکتها و هزینههای آن را توصیف میکند.
کتاب مشهور Gang of Four تعداد ۲۳ پترن کلاسیک را در سه دسته معرفی میکند. در طراحی واقعی فروشگاه اینترنتی، پترنها میتوانند مسئولیت ساخت درگاه پرداخت، مدیریت سبد خرید یا ارسال رویدادهای سفارش را روشن کنند. با اینحال استفاده از پترن بینیاز از مسئله واقعی، کد را پیچیده میکند.
دیزاین پترنهای سازنده (Creational)، ۵ مورد
| دیزاین پترن | مسئلهای که حل میکند | سناریوی فروشگاه |
|---|---|---|
| دیزاین پترن سینگلتون | کنترل تعداد نمونه | سرویس پیکربندی در محدوده مشخص |
| دیزاین پترن فکتوری متد | واگذاری ساخت آبجکت | انتخاب درگاه پرداخت |
| دیزاین پترن ابسترکت فکتوری | ساخت خانواده سازگار از آبجکتها | ساخت Client و Formatter مخصوص یک سرویس ارسال |
| دیزاین پترن بیلدر | ساخت مرحلهای آبجکت پیچیده | ساخت یک Query فیلتر محصولات |
| دیزاین پترن پروتوتایپ | ساخت نمونه بر اساس نمونه موجود | کپی یک قالب تخفیف و تغییر چند ویژگی |
دیزاین پترنهای ساختاری (Structural)، ۷ مورد
| دیزاین پترن | هدف | مثال کاربردی |
|---|---|---|
| دیزاین پترن آداپتر | سازگار کردن رابط ناسازگار | هماهنگسازی API شرکت حملونقل |
| دیزاین پترن بریج | جداسازی انتزاع از پیادهسازی | کانال اعلان مستقل از قالب پیام |
| دیزاین پترن کامپوزیت | ساخت ساختار درختی | دستهبندی و زیرمجموعه محصولات |
| دیزاین پترن دکوراتور | افزودن رفتار بدون تغییر کلاس اصلی | تخفیف و مالیات به قیمت پایه |
| دیزاین پترن فساد | رابط ساده روی چند سرویس | ثبت سفارش با موجودی، پرداخت و اعلان |
| دیزاین پترن فلایویت | اشتراک وضعیت مشترک | اطلاعات مشترک SKU در هزاران آیتم |
| دیزاین پترن پراکسی | کنترل دسترسی به آبجکت دیگر | Cache یا کنترل مجوز هنگام دریافت گزارش |
دیزاین پترنهای رفتاری (Behavioral)، ۱۱ مورد
| دیزاین پترن | کاربرد | نمونه |
|---|---|---|
| دیزاین پترن چین آو ریسپانسیبیلیتی | عبور درخواست از چند Handler | بررسی اعتبارسنجی و سیاست تخفیف |
| دیزاین پترن کامند | تبدیل عملیات به آبجکت | ثبت وظیفه ارسال سفارش در صف |
| دیزاین پترن اینترپرتر | تفسیر دستور یا زبان کوچک | قواعد فیلتر جستوجوی محصولات |
| دیزاین پترن ایتریتور | پیمایش مجموعه بدون دانستن ساختار داخلی | پیمایش صفحات نتایج API |
| دیزاین پترن مدیاتور | کاهش ارتباط مستقیم اجزا | هماهنگی فرم Checkout |
| دیزاین پترن ممنتو | ثبت و بازیابی وضعیت | بازگردانی پیشنویس سبد خرید |
| دیزاین پترن آبزرور | اعلام تغییر به مشترکان | اطلاعرسانی پس از ثبت سفارش |
| دیزاین پترن استیت | تغییر رفتار متناسب با وضعیت | وضعیت پرداخت و ارسال سفارش |
| دیزاین پترن استراتژی | تعویض الگوریتم در زمان اجرا | روش محاسبه هزینه ارسال |
| دیزاین پترن تمپلیت متد | تعریف اسکلت فرایند و نقاط قابل تغییر | چرخه پردازش سفارشهای مختلف |
| دیزاین پترن ویزیتور | افزودن عملیات روی ساختار آبجکتها | گزارش مالی روی انواع ردیف فاکتور |
از کجا یادگیری را شروع کنیم؟
معمولا Strategy، Factory Method، Adapter و Observer سریعتر در کدهای پروژه واقعی دیده میشوند. ابتدا نشانههای مسئله را بشناسید و سپس پترن را انتخاب کنید.
مطالعه تکمیلی: مقاله دیزاین پترن باورژن و دوره رایگان دیزاین پترنهای باورژن.