همه الگوهای طراحی در یک نگاه به صورت خلاصه

منبع: chatgpt

۱. الگو Singleton
توضیح: این الگو اطمینان می‌دهد که یک کلاس تنها یک نمونه دارد و دسترسی به آن از طریق یک نقطه‌ی جهانی ممکن است.
مثال: یک کلاس Logger برای ثبت لاگ‌ها که باید تنها یک نمونه داشته باشد.
مشکل حل‌شده: کنترل دسترسی به منابع مشترک، مثل دسترسی به فایل ثبت لاگ.

۲. الگو Factory Method
توضیح: این الگو وظیفه ساخت اشیاء را به کلاس‌های فرزند می‌سپارد، تا نوع دقیق شیء در زمان اجرا تعیین شود.
مثال: یک سیستم سفارش که بر اساس نوع سفارش (آنلاین، حضوری) شیء مناسب را تولید می‌کند.
مشکل حل‌شده: جداسازی فرآیند ساخت اشیاء از کلاس‌های مصرف‌کننده، کاهش وابستگی به کلاس‌های خاص.

۳. الگو Observer
توضیح: این الگو به اشیاء اجازه می‌دهد که در صورت تغییر وضعیت یک شیء دیگر، از آن مطلع شوند.
مثال: نوتیفیکیشن‌ها در یک شبکه اجتماعی که وقتی کاربری پست جدیدی می‌گذارد، به دیگران اطلاع‌رسانی می‌کند.
مشکل حل‌شده: مدیریت وابستگی‌ها بین اشیاء بدون نیاز به نظارت مستقیم بر تغییرات.

۴. الگو Decorator
توضیح: این الگو به شما اجازه می‌دهد قابلیت‌های جدیدی را به شیء اضافه کنید، بدون آنکه کلاس شیء را تغییر دهید.
مثال: اضافه کردن قابلیت‌های امنیتی به یک سیستم ثبت لاگ با تزئین کلاس لاگ اولیه.
مشکل حل‌شده: افزودن قابلیت‌های بیشتر به شیء بدون ارث‌بری و تغییر کلاس پایه.

۵. الگو Strategy
توضیح: این الگو به شما اجازه می‌دهد که خانواده‌ای از الگوریتم‌ها را تعریف و به طور پویا یکی از آنها را در زمان اجرا انتخاب کنید.
مثال: یک سیستم تخفیف که استراتژی‌های مختلف محاسبه تخفیف (مثل تخفیف فصلی یا تخفیف ویژه مشتریان) را پیاده‌سازی می‌کند.
مشکل حل‌شده: امکان تغییر رفتار الگوریتم‌ها در زمان اجرا بدون نیاز به تغییرات در کد.

۶. الگو Adapter
توضیح: این الگو یک کلاس را برای سازگاری با یک رابط دیگر تغییر می‌دهد، بدون نیاز به تغییر کد منبع آن کلاس.
مثال: استفاده از یک کلاس کتابخانه قدیمی در سیستم جدید با تغییر شکل رابط آن.
مشکل حل‌شده: اتصال کلاس‌هایی با رابط‌های ناسازگار به یکدیگر.

۷. الگو Facade
توضیح: این الگو یک رابط ساده برای استفاده از یک سیستم پیچیده فراهم می‌کند.
مثال: رابط ساده برای دسترسی به عملیات پیچیده در سیستم مدیریت بانک.
مشکل حل‌شده: کاهش پیچیدگی و افزایش سادگی در استفاده از سیستم‌های پیچیده.

۸. الگو Command
توضیح: این الگو عملیات را به‌عنوان یک شیء کپسوله می‌کند و این امکان را فراهم می‌کند که عملیات‌ها را ذخیره، اجرا یا به عقب بازگردانید.
مثال: سیستم undo/redo در نرم‌افزارهای ویرایش متن.
مشکل حل‌شده: مدیریت و ذخیره‌سازی عملیات‌های پیچیده به‌صورت شیء و اجرای مجدد یا لغو آنها.

۹. الگو Proxy
توضیح: این الگو یک کلاس جایگزین برای کنترل دسترسی یا عملکرد به یک شیء دیگر ارائه می‌دهد.
مثال: یک پروکسی برای مدیریت دسترسی به منابع از راه دور یا سنگین، مثل اتصال به دیتابیس.
مشکل حل‌شده: کنترل دسترسی و کاهش هزینه‌های ایجاد شیء‌های سنگین.

۱۰. الگو Builder
توضیح: این الگو ساخت اشیاء پیچیده را به صورت گام‌به‌گام و قابل تنظیم انجام می‌دهد.
مثال: ساخت یک خانه که شامل اتاق‌ها، درها، پنجره‌ها و سقف باشد و هر جزء به‌صورت مجزا ساخته شود.
مشکل حل‌شده: جلوگیری از پیچیدگی زیاد در ساخت اشیاء پیچیده با استفاده از فرآیندهای ساده و قابل تنظیم.

۱۱. الگو Visitor

توضیح: در این الگو، عملیاتی که می‌خواهید روی عناصر یک شیء انجام دهید را به یک کلاس جداگانه منتقل می‌کنید. این الگو امکان اضافه کردن عملیات جدید بدون تغییر کلاس‌های اصلی را فراهم می‌کند.

  • مثال واقعی: فرض کنید شما یک سیستم پردازش اسناد دارید که انواع مختلفی از فایل‌ها مانند PDF و Word را پشتیبانی می‌کند. با استفاده از Visitor می‌توانید عملکردهایی مانند چاپ یا پیش‌نمایش را بدون تغییر در کلاس‌های این فایل‌ها پیاده‌سازی کنید.
  • مشکل حل شده: افزودن رفتارهای جدید به کلاس‌ها بدون تغییر کد اصلی آن‌ها.

۱۲. الگو Memento

توضیح: این الگو به شما اجازه می‌دهد تا وضعیت یک شیء را ذخیره کرده و بعداً بدون تغییرات اضافی آن را بازگردانید.

  • مثال واقعی: در یک ویرایشگر متن، شما می‌توانید از این الگو برای پیاده‌سازی قابلیت «Undo» استفاده کنید. هر بار که کاربر تغییری ایجاد می‌کند، وضعیت قبلی ذخیره می‌شود و در صورت نیاز به عقب برگردانده می‌شود.
  • مشکل حل شده: حفظ تاریخچه تغییرات یک شیء و امکان بازگردانی آن به حالت قبلی.

۱۳. الگو Chain of Responsibility

توضیح: در این الگو، یک درخواست به یک زنجیره از پردازش‌گرها فرستاده می‌شود تا زمانی که پردازش‌گری مناسب برای آن پیدا شود و آن را پردازش کند.

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

۱۴. الگو Pipeline

توضیح: الگوی Pipeline یک شیء را از طریق یک سری از مراحل (وظایف) یا پردازش‌ها عبور می‌دهد، که هر مرحله وظیفه‌ی خاصی را روی شیء انجام می‌دهد و خروجی مرحله قبل به عنوان ورودی مرحله بعدی استفاده می‌شود.

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

۱۵. Abstract Factory:

توضیح: این الگو یک واسطه برای تولید خانواده‌ای از اشیاء مرتبط یا وابسته بدون مشخص کردن کلاس‌های مشخص آنها فراهم می‌کند.

  • مثال: یک سیستم UI که برای پلتفرم‌های مختلف (ویندوز، مک، لینوکس) از دکمه‌ها و پنجره‌های مختلفی استفاده می‌کند. با استفاده از Abstract Factory، می‌توان برای هر پلتفرم یک کارخانه خاص تعریف کرد.
  • مشکل حل شده: جلوگیری از وابستگی کد به کلاس‌های خاص و ایجاد انعطاف‌پذیری در تولید اشیاء مختلف.

۱۶. Composite:

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

  • مثال: سیستم مدیریت فایل که می‌تواند فایل‌ها و پوشه‌ها را به‌طور یکنواخت مدیریت کند، به گونه‌ای که هر پوشه شامل فایل‌ها و پوشه‌های دیگری باشد.
  • مشکل حل شده: تسهیل کار با ساختارهای پیچیده‌ای که ترکیبی از اشیاء منفرد و ترکیب شده هستند.

۱۷. Bridge:

توضیح: این الگو رابط (abstraction) و پیاده‌سازی (implementation) را از یکدیگر جدا می‌کند تا هر کدام به طور مستقل تغییر کنند.

  • مثال: یک سیستم رندر گرافیکی که می‌تواند اشیاء دو بعدی و سه بعدی را برای پلتفرم‌های مختلف (OpenGL و DirectX) رندر کند.
  • مشکل حل شده: افزایش انعطاف‌پذیری و امکان تغییر رابط و پیاده‌سازی به‌صورت جداگانه.

۱۸. Mediator:

توضیح: این الگو واسطه‌ای است که تعاملات پیچیده بین چندین شیء را مدیریت می‌کند، به جای اینکه این اشیاء مستقیماً با یکدیگر در ارتباط باشند.

  • مثال: یک سیستم چت که کاربران مختلف را به‌صورت غیرمستقیم از طریق یک سرور مرکزی (واسط) به هم متصل می‌کند.
  • مشکل حل شده: کاهش وابستگی و پیچیدگی ارتباطات میان اجزا.

۱۹. Iterator:

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

  • مثال: یک کتابخانه برای پیمایش عناصر یک لیست یا آرایه بدون نیاز به دانستن ساختار داخلی آن.
  • مشکل حل شده: فراهم کردن راهی استاندارد برای پیمایش مجموعه‌ها بدون نیاز به افشای جزئیات داخلی آن‌ها.

۲۰. Template Method:

توضیح: این الگو یک الگوریتم را در یک متد تعریف می‌کند، اما برخی از مراحل را به کلاس‌های فرعی واگذار می‌کند تا جزئیات را پیاده‌سازی کنند.

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

مثال: یک کلاس الگوریتم مرتب‌سازی که چارچوب کلی مرتب‌سازی را ارائه می‌دهد، ولی جزئیات مقایسه را به زیرکلاس‌ها واگذار می‌کند.

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *