Skip to content

Latest commit

 

History

History
228 lines (138 loc) · 14.2 KB

File metadata and controls

228 lines (138 loc) · 14.2 KB

خلاصه دوره: Mastering Design Patterns: بخش ۱

این نسخه، خلاصه کامل و به‌روز همه الگوهای رفتاری (Behavioral Patterns) همین دوره است.


قبل از شروع

خلاصه‌های سریع از دوره‌های کاربردی، برای یادگیری و مرور سریع.
برای عمیق‌تر شدن در هر مبحث، روی لینک‌های «Ask AI» کلیک کن.

AI-Powered buttons

Teach Me: 5 Years Old | Beginner | Intermediate | Advanced | (reset auto redirect)

Learn Differently: Analogy | Storytelling | Cheatsheet | Mindmap | Flashcards | Practical Projects | Code Examples | Common Mistakes

Check Understanding: Generate Quiz | Interview Me | Refactor Challenge | Assessment Rubric | Next Steps


مقدمه دوره و این‌که چرا Design Patternها مهم‌اند

؜Design Patternها راه‌حل‌های آماده، تمیز و قابل‌استفاده‌مجدد برای مسائل تکراری در طراحی نرم‌افزار هستند.
بخشِ اول، ۱۰ تا از ۱۱ الگوی رفتاری کتاب Gang of Four را پوشش می‌دهد (به‌جز الگوی Interpreter).

مزایا:

  • کمک به انتقال ایده‌ها با سرعت بالاتر (مثلاً: «اینجا Strategy Pattern استفاده کن»)
  • نوشتن کد تمیزتر و قابل‌نگه‌داری‌تر
  • سرعت بالاتر در یادگیری Framework / Libraryها (چون Patternها رو درونشون تشخیص می‌دی)

روش تدریس Mosh: اول یک مسئله واقعی → چند راه‌حل بد → بهبود تدریجی → رسیدن به Design Pattern اصلی.

Ask AI: Introduction to Design Patterns


مفاهیم پایه OOP (زیرساخت همه Patternها)

مرور خیلی شفاف مفاهیم اصلی OOP (با مثال‌های ساده Java) که تقریباً همه Patternها روی اون‌ها سوار می‌شن:

  • کلاس‌ها و Objectها
  • ؜Coupling (وابستگی زیاد / کم)
  • ؜Interfaceها و اصل «program to an interface»
  • ؜Encapsulation (پنهان‌کردن داده و نمایش رفتار)
  • ؜Abstraction (پنهان‌کردن جزئیات پیاده‌سازی)
  • ؜Inheritance و Polymorphism
  • معرفی ساده UML notation

حتی برنامه‌نویس‌های باتجربه هم می‌گن همین ۳۰–۴۰ دقیقه اول، به‌تنهایی می‌ارزه.

Ask AI: OOP Essentials


الگوی Memento (Undo/Redo)

خلاصه: ذخیره و بازیابی state داخلی یک Object بدون این‌که Encapsulation شکسته بشه.

سناریوی آموزشی Mosh: پیاده‌سازی یک Text Editor ساده → ایده‌های ابتدایی برای Undo → مشکلات → راه‌حل نهایی با سه نقش اصلی:

  • ؜Originator (‏Editor)
  • ؜Memento (‏EditorState – غیرقابل‌تغییر / immutable)
  • ؜Caretaker (‏History – به‌صورت stack از stateها)

مثال: تایپ می‌کنی A → بعد AB → بعد ABC → با Undo، برمی‌گردی به state قبلی.

؜ Ask AI: Memento Pattern


الگوی State (تغییر رفتار شیء با تغییر State داخلی)

خلاصه: به یک Object اجازه بده وقتی State داخلی‌اش عوض می‌شه، رفتارش هم عوض بشه؛ طوری که انگار کلاسش عوض شده.

سناریوی Mosh: یک Canvas Tool (Brush، Eraser، Selection و …) → اول همه‌چیز با یک switch بزرگ و شلوغ هندل می‌شه → بعد هر State به یک کلاس جدا تبدیل می‌شه → Canvas فقط یک reference به Tool نگه می‌داره و eventهای موس رو به همون می‌سپره.

نتیجه: برای اضافه‌کردن یک Tool جدید، لازم نیست کدهای قبلی رو دست بزنی؛ فقط یک کلاس جدید می‌نویسی.

؜ Ask AI: State Pattern


الگوی Iterator (پیمایش امن مجموعه‌ها)

خلاصه: راهی برای دسترسی دنباله‌ای (sequential) به عناصر یک Collection، بدون این‌که ساختار داخلی‌اش رو لو بده.

سناریوی Mosh: یک ProductCollection سفارشی → اول، آرایه داخلی مستقیم بیرون داده می‌شه (که بده) → بعد تعریف یک Iterator interface → و ساخت ListIterator که می‌دونه چطور روی Collection حرکت کنه.

مزیت: حتی اگر ساختار داخلی Collection عوض بشه (مثلاً از array به linked list)، کد Client هنوز با همون Iterator کار می‌کنه.

؜ Ask AI: Iterator Pattern


الگوی Strategy (تعویض الگوریتم در زمان اجرا)

خلاصه: یک خانواده از الگوریتم‌ها رو تعریف کن، هرکدوم رو در یک کلاس جدا encapsulate کن و اجازه بده در زمان اجرا (runtime) بین اون‌ها سوییچ بشه.

سناریوی Mosh: یک Image Compressor → اول الگوریتم فشرده‌سازی داخلش hard-code شده → بعد الگوریتم‌های مختلف (‏JpegCompressor، PngCompressor) → تعریف یک Compressor interface → کلاس ImageStorage هر Compressor (و Filter) رو به‌صورت dependency در زمان اجرا دریافت می‌کنه.

نتیجه: برای اضافه‌کردن الگوریتم فشرده‌سازی یا Filter جدید، لازم نیست کد ImageStorage رو تغییر بدی؛ فقط کلاس جدید رو پیاده‌سازی می‌کنی.

؜ Ask AI: Strategy Pattern


الگوی Template Method (اسکلت الگوریتم)

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

سناریوی Mosh: یک Data Processing Pipeline → چند مرحله مشترک مثل (load → process → save) → هر نوع داده فقط مراحلی رو override می‌کنه که با بقیه فرق داره.

این Pattern در Frameworkها خیلی استفاده می‌شه (مثلاً ASP.NET Page Lifecycle، یا Startup در Spring Boot).

؜ Ask AI: Template Method Pattern


الگوی Command (درخواست‌ها به‌عنوان Object)

خلاصه: یک Request رو داخل یک Object کپسوله کن تا بتونی اون رو پارامتر بدهی، صف کنی، لاگ بگیری و Undo/Redo رو راحت پیاده‌سازی کنی.

سناریوی Mosh: یک Video Editor با قابلیت Bold / Contrast / Undo → اول همه‌چیز قاطی و درهم → بعد هر Action تبدیل می‌شه به یک Command object → History به‌صورت stack نگه‌داری می‌شه → یک UndoCommand مخصوص برای برگشت.

نتیجه: Undo / Redo تقریباً مجانی به‌دست میاد و اضافه‌کردن Action جدید خیلی ساده می‌شه.

؜ Ask AI: Command Pattern


الگوی Observer (Publish–Subscribe)

خلاصه: یک رابطه یک‌به‌چند تعریف کن: هر وقت State یک Object عوض شد، تمام وابسته‌هاش (Observers) خودکار خبر می‌شن.

سناریوی Mosh: مثال قیمت سهام → یک DataSource (به‌عنوان Subject) → چند تا Spreadsheet / Chart (به‌عنوان Observer) → پیاده‌سازی به دو مدل push یا pull.

کاربرد همه‌جا: eventها، listenerها، reactive programming و …

؜ Ask AI: Observer Pattern


الگوی Mediator (متمرکزکردن ارتباط‌ها)

خلاصه: به‌جای این‌که Objectها مستقیم با هم حرف بزنن، همه از طریق یک Mediator صحبت می‌کنن → Coupling بین اون‌ها خیلی کم می‌شه.

سناریوی Mosh: یک Dialog Box با ListBox → TextBox → Button → اول همه Controlها مستقیماً همدیگه رو صدا می‌زنن → بعد یک DialogBox (Mediator) ایجاد می‌شه که مالک همه کنترل‌هاست و با الگوی Observer-style eventها رو هندل می‌کنه.

نتیجه: هر Control مستقل‌تر و قابل‌استفاده‌مجددتر می‌شه و منطق هماهنگی، وسط (داخل Mediator) متمرکز می‌مونه.

؜ Ask AI: Mediator Pattern


الگوی Chain of Responsibility (زنجیره پردازش)

خلاصه: یک Request رو در طول یک زنجیره از Handlerها عبور بده؛ هر Handler تصمیم می‌گیره خودش پردازش کنه یا بده بعدی.

سناریوی Mosh: یک Web Server → Handlerهای پشت‌سرهم مثل Authenticator → Logger → Compressor → هر Handler از یک کلاس پایه Handler ارث می‌بره و یک reference به Handler بعدی داره.

نتیجه: یک Pipeline باز و قابل‌توسعه (Open/Closed): به‌راحتی می‌تونی ترتیب مراحل رو عوض کنی، مرحله جدید اضافه کنی یا مرحله‌ای رو حذف کنی.

؜ Ask AI: Chain of Responsibility Pattern


الگوی Visitor (اضافه‌کردن رفتار بدون دست‌زدن به کلاس‌ها)

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

سناریوی Mosh: یک سند HTML با Nodeهای مختلف → عملیات highlight → تولید plain text و … → هر عملیات به‌صورت یک کلاس جدا تعریف می‌شه → Nodeها یک متد accept دارن که یک Visitor (Operation) رو می‌پذیره.

نتیجه: برای اضافه‌کردن یک رفتار جدید (مثل استخراج لینک‌ها، فیلتر صوتی و …) فقط یک Visitor جدید می‌نویسی؛ لازم نیست کلاس Nodeهای اصلی رو تغییر بدی.

؜ Ask AI: Visitor Pattern


لینک دوره اصلی:
https://codewithmosh.com/p/design-patterns-part1


درباره خلاصه‌کننده

من Ali Sol هستم؛ Backend Developer.
وب‌سایت: https://alisol.ir
لینکدین: https://www.linkedin.com/in/alisolphp