الگوهای طراحی نرم‌افزار Design Patterns کدام‌اند

خلاصه
1404/05/10

الگوهای طراحی نرم‌افزار (Design Patterns) راه‌حل‌های امتحان‌شده و قابل استفاده مجدد برای مسائل رایج در طراحی نرم‌افزار هستند. این الگوها کد نیستند که مستقیماً کپی و پیست شوند،

الگوهای طراحی نرم‌افزار Design Patterns کدام‌اند

الگوهای طراحی نرم‌افزار (Design Patterns) راه‌حل‌های امتحان‌شده و قابل استفاده مجدد برای مسائل رایج در طراحی نرم‌افزار هستند. این الگوها کد نیستند که مستقیماً کپی و پیست شوند، بلکه بیشتر نقش راهنما و الگو را دارند که به شما کمک می‌کنند تا کد خود را به شیوه‌ای سازمان‌یافته‌تر، قابل نگهداری‌تر و قابل گسترش‌تر بنویسید.

الگوهای طراحی را می‌توان بر اساس **هدف** (Purpose) و **دامنه** (Scope) به دسته‌های مختلفی تقسیم کرد:

**بر اساس هدف:**

* **الگوهای خلقت (Creational):** این الگوها به روش‌های ایجاد اشیاء می‌پردازند و هدفشان پنهان کردن منطق پیچیده ایجاد اشیاء و افزایش انعطاف‌پذیری کد است.
* **الگوهای ساختاری (Structural):** این الگوها به چگونگی ترکیب کلاس‌ها و اشیاء برای ایجاد ساختارهای بزرگتر می‌پردازند. هدفشان ایجاد ساختارهایی انعطاف‌پذیر و کارآمد است.
* **الگوهای رفتاری (Behavioral):** این الگوها به چگونگی تعامل اشیاء با یکدیگر و تقسیم مسئولیت‌ها می‌پردازند. هدفشان تعریف الگوهای ارتباطی و الگوریتم‌های بین اشیاء است.

**بر اساس دامنه:**

* **الگوهای کلاسی (Class):** روابط بین کلاس‌ها را از طریق وراثت ایجاد می‌کنند. (ایستا)
* **الگوهای شیئی (Object):** روابط بین اشیاء را در زمان اجرا ایجاد می‌کنند. (پویا)

**برخی از مهم‌ترین الگوهای طراحی:**

**الگوهای خلقت (Creational Patterns):**

* **Singleton (تک‌نسخه‌ای):** اطمینان حاصل می‌کند که یک کلاس تنها یک نمونه داشته باشد و یک نقطه دسترسی سراسری به آن فراهم می‌کند. (مثال: مدیریت پیکربندی)
* **Factory Method (متد کارخانه):** یک رابط (interface) برای ایجاد اشیاء تعریف می‌کند، اما به زیرکلاس‌ها اجازه می‌دهد تا نوع اشیاء ایجاد شده را تعیین کنند. (مثال: ایجاد انواع مختلف دکمه بر اساس سیستم عامل)
* **Abstract Factory (کارخانه انتزاعی):** یک رابط برای ایجاد خانواده‌ای از اشیاء مرتبط تعریف می‌کند، بدون اینکه کلاس‌های مشخص آن‌ها را مشخص کند. (مثال: ایجاد مجموعه کاملی از ویجت‌ها برای یک رابط کاربری خاص)
* **Builder (سازنده):** فرآیند ساخت یک شیء پیچیده را از نمایش آن جدا می‌کند تا فرآیند ساخت بتواند نمایش‌های مختلفی را ایجاد کند. (مثال: ساخت یک ماشین با آپشن‌های مختلف)
* **Prototype (نمونه اولیه):** با کپی کردن یک شیء موجود، شیءهای جدید ایجاد می‌کند. (مثال: ایجاد اشیاء بر اساس یک شیء قالب)

**الگوهای ساختاری (Structural Patterns):**

* **Adapter (تطبیق‌دهنده):** رابط یک کلاس را به رابطی دیگر تبدیل می‌کند که مشتری انتظار دارد. (مثال: استفاده از یک کتابخانه قدیمی با یک رابط جدید)
* **Bridge (پل):** یک انتزاع را از پیاده‌سازی آن جدا می‌کند تا این دو بتوانند به طور مستقل از هم تغییر کنند. (مثال: توسعه یک API بدون تغییر رابط کاربری)
* **Composite (ترکیب):** به شما اجازه می‌دهد تا اشیاء را به صورت ساختارهای درختی نمایش دهید تا بتوانید با اشیاء منفرد و ترکیبات اشیاء به طور یکسان برخورد کنید. (