Skip to content

Commit 50214e1

Browse files
authored
Create summary.fa.md
1 parent c143ecb commit 50214e1

1 file changed

Lines changed: 187 additions & 0 deletions

File tree

  • courses/code-with-mosh-mastering-design-patterns-part-1
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
# خلاصه دوره: Mastering Design Patterns: بخش ۱
2+
3+
- پلتفرم: Code with Mosh
4+
- مدرس: Mosh Hamedani
5+
- مدت زمان: ۴:۰۰:۰۰
6+
- لینک دوره: <https://codewithmosh.com/p/design-patterns-part1>
7+
8+
این نسخه، خلاصه کامل و به‌روز همه الگوهای رفتاری (Behavioral Patterns) همین دوره است.
9+
10+
---
11+
12+
## قبل از شروع
13+
14+
خلاصه‌های سریع از دوره‌های کاربردی، برای یادگیری و مرور سریع.
15+
برای عمیق‌تر شدن در هر مبحث، روی لینک‌های «Ask AI» کلیک کن.
16+
17+
---
18+
19+
## مقدمه دوره و این‌که چرا Design Patternها مهم‌اند
20+
21+
؜Design Patternها راه‌حل‌های آماده، تمیز و قابل‌استفاده‌مجدد برای مسائل تکراری در طراحی نرم‌افزار هستند.
22+
بخشِ اول، ۱۰ تا از ۱۱ الگوی رفتاری کتاب Gang of Four را پوشش می‌دهد (به‌جز الگوی Interpreter).
23+
24+
مزایا:
25+
26+
- کمک به انتقال ایده‌ها با سرعت بالاتر (مثلاً: «اینجا Strategy Pattern استفاده کن»)
27+
- نوشتن کد تمیزتر و قابل‌نگه‌داری‌تر
28+
- سرعت بالاتر در یادگیری Framework / Libraryها (چون Patternها رو درونشون تشخیص می‌دی)
29+
30+
روش تدریس Mosh: اول یک مسئله واقعی → چند راه‌حل بد → بهبود تدریجی → رسیدن به Design Pattern اصلی.
31+
32+
؜Ask AI: Introduction to Design Patterns
33+
34+
---
35+
36+
## مفاهیم پایه OOP (زیرساخت همه Patternها)
37+
38+
مرور خیلی شفاف مفاهیم اصلی OOP (با مثال‌های ساده Java) که تقریباً همه Patternها روی اون‌ها سوار می‌شن:
39+
40+
- کلاس‌ها و Objectها
41+
- ؜Coupling (وابستگی زیاد / کم)
42+
- ؜Interfaceها و اصل «program to an interface»
43+
- ؜Encapsulation (پنهان‌کردن داده و نمایش رفتار)
44+
- ؜Abstraction (پنهان‌کردن جزئیات پیاده‌سازی)
45+
- ؜Inheritance و Polymorphism
46+
- معرفی ساده UML notation
47+
48+
حتی برنامه‌نویس‌های باتجربه هم می‌گن همین ۳۰–۴۰ دقیقه اول، به‌تنهایی می‌ارزه.
49+
50+
؜Ask AI: OOP Essentials
51+
52+
---
53+
54+
## الگوی Memento (Undo/Redo)
55+
56+
**خلاصه:** ذخیره و بازیابی state داخلی یک Object بدون این‌که Encapsulation شکسته بشه.
57+
58+
**سناریوی آموزشی Mosh:** پیاده‌سازی یک Text Editor ساده → ایده‌های ابتدایی برای Undo → مشکلات → راه‌حل نهایی با سه نقش اصلی:
59+
60+
- ؜Originator (‏Editor)
61+
- ؜Memento (‏EditorState – غیرقابل‌تغییر / immutable)
62+
- ؜Caretaker (‏History – به‌صورت stack از stateها)
63+
64+
**مثال:** تایپ می‌کنی A → بعد AB → بعد ABC → با Undo، برمی‌گردی به state قبلی.
65+
66+
؜Ask AI: Memento Pattern
67+
68+
---
69+
70+
## الگوی State (تغییر رفتار شیء با تغییر State داخلی)
71+
72+
**خلاصه:** به یک Object اجازه بده وقتی State داخلی‌اش عوض می‌شه، رفتارش هم عوض بشه؛ طوری که انگار کلاسش عوض شده.
73+
74+
**سناریوی Mosh:** یک Canvas Tool (Brush، Eraser، Selection و …) → اول همه‌چیز با یک switch بزرگ و شلوغ هندل می‌شه → بعد هر State به یک کلاس جدا تبدیل می‌شه → Canvas فقط یک reference به Tool نگه می‌داره و eventهای موس رو به همون می‌سپره.
75+
76+
**نتیجه:** برای اضافه‌کردن یک Tool جدید، لازم نیست کدهای قبلی رو دست بزنی؛ فقط یک کلاس جدید می‌نویسی.
77+
78+
؜Ask AI: State Pattern
79+
80+
---
81+
82+
## الگوی Iterator (پیمایش امن مجموعه‌ها)
83+
84+
**خلاصه:** راهی برای دسترسی دنباله‌ای (sequential) به عناصر یک Collection، بدون این‌که ساختار داخلی‌اش رو لو بده.
85+
86+
**سناریوی Mosh:** یک ProductCollection سفارشی → اول، آرایه داخلی مستقیم بیرون داده می‌شه (که بده) → بعد تعریف یک Iterator interface → و ساخت ListIterator که می‌دونه چطور روی Collection حرکت کنه.
87+
88+
**مزیت:** حتی اگر ساختار داخلی Collection عوض بشه (مثلاً از array به linked list)، کد Client هنوز با همون Iterator کار می‌کنه.
89+
90+
؜Ask AI: Iterator Pattern
91+
92+
---
93+
94+
## الگوی Strategy (تعویض الگوریتم در زمان اجرا)
95+
96+
**خلاصه:** یک خانواده از الگوریتم‌ها رو تعریف کن، هرکدوم رو در یک کلاس جدا encapsulate کن و اجازه بده در زمان اجرا (runtime) بین اون‌ها سوییچ بشه.
97+
98+
**سناریوی Mosh:** یک Image Compressor → اول الگوریتم فشرده‌سازی داخلش hard-code شده → بعد الگوریتم‌های مختلف (‏JpegCompressor، PngCompressor) → تعریف یک Compressor interface → کلاس ImageStorage هر Compressor (و Filter) رو به‌صورت dependency در زمان اجرا دریافت می‌کنه.
99+
100+
**نتیجه:** برای اضافه‌کردن الگوریتم فشرده‌سازی یا Filter جدید، لازم نیست کد ImageStorage رو تغییر بدی؛ فقط کلاس جدید رو پیاده‌سازی می‌کنی.
101+
102+
؜Ask AI: Strategy Pattern
103+
104+
---
105+
106+
## الگوی Template Method (اسکلت الگوریتم)
107+
108+
**خلاصه:** اسکلت کلی یک الگوریتم رو در کلاس پایه تعریف کن، اما اجازه بده Subclassها مراحل خاص رو override کنن.
109+
110+
**سناریوی Mosh:** یک Data Processing Pipeline → چند مرحله مشترک مثل (load → process → save) → هر نوع داده فقط مراحلی رو override می‌کنه که با بقیه فرق داره.
111+
112+
این Pattern در Frameworkها خیلی استفاده می‌شه (مثلاً ASP.NET Page Lifecycle، یا Startup در Spring Boot).
113+
114+
؜Ask AI: Template Method Pattern
115+
116+
---
117+
118+
## الگوی Command (درخواست‌ها به‌عنوان Object)
119+
120+
**خلاصه:** یک Request رو داخل یک Object کپسوله کن تا بتونی اون رو پارامتر بدهی، صف کنی، لاگ بگیری و Undo/Redo رو راحت پیاده‌سازی کنی.
121+
122+
**سناریوی Mosh:** یک Video Editor با قابلیت Bold / Contrast / Undo → اول همه‌چیز قاطی و درهم → بعد هر Action تبدیل می‌شه به یک Command object → History به‌صورت stack نگه‌داری می‌شه → یک UndoCommand مخصوص برای برگشت.
123+
124+
**نتیجه:** Undo / Redo تقریباً مجانی به‌دست میاد و اضافه‌کردن Action جدید خیلی ساده می‌شه.
125+
126+
؜Ask AI: Command Pattern
127+
128+
---
129+
130+
## الگوی Observer (Publish–Subscribe)
131+
132+
**خلاصه:** یک رابطه یک‌به‌چند تعریف کن: هر وقت State یک Object عوض شد، تمام وابسته‌هاش (Observers) خودکار خبر می‌شن.
133+
134+
**سناریوی Mosh:** مثال قیمت سهام → یک DataSource (به‌عنوان Subject) → چند تا Spreadsheet / Chart (به‌عنوان Observer) → پیاده‌سازی به دو مدل push یا pull.
135+
136+
کاربرد همه‌جا: eventها، listenerها، reactive programming و …
137+
138+
؜Ask AI: Observer Pattern
139+
140+
---
141+
142+
## الگوی Mediator (متمرکزکردن ارتباط‌ها)
143+
144+
**خلاصه:** به‌جای این‌که Objectها مستقیم با هم حرف بزنن، همه از طریق یک Mediator صحبت می‌کنن → Coupling بین اون‌ها خیلی کم می‌شه.
145+
146+
**سناریوی Mosh:** یک Dialog Box با ListBox → TextBox → Button → اول همه Controlها مستقیماً همدیگه رو صدا می‌زنن → بعد یک DialogBox (Mediator) ایجاد می‌شه که مالک همه کنترل‌هاست و با الگوی Observer-style eventها رو هندل می‌کنه.
147+
148+
**نتیجه:** هر Control مستقل‌تر و قابل‌استفاده‌مجددتر می‌شه و منطق هماهنگی، وسط (داخل Mediator) متمرکز می‌مونه.
149+
150+
؜Ask AI: Mediator Pattern
151+
152+
---
153+
154+
## الگوی Chain of Responsibility (زنجیره پردازش)
155+
156+
**خلاصه:** یک Request رو در طول یک زنجیره از Handlerها عبور بده؛ هر Handler تصمیم می‌گیره خودش پردازش کنه یا بده بعدی.
157+
158+
**سناریوی Mosh:** یک Web Server → Handlerهای پشت‌سرهم مثل Authenticator → Logger → Compressor → هر Handler از یک کلاس پایه Handler ارث می‌بره و یک reference به Handler بعدی داره.
159+
160+
**نتیجه:** یک Pipeline باز و قابل‌توسعه (Open/Closed): به‌راحتی می‌تونی ترتیب مراحل رو عوض کنی، مرحله جدید اضافه کنی یا مرحله‌ای رو حذف کنی.
161+
162+
؜Ask AI: Chain of Responsibility Pattern
163+
164+
---
165+
166+
## الگوی Visitor (اضافه‌کردن رفتار بدون دست‌زدن به کلاس‌ها)
167+
168+
**خلاصه:** الگوریتم‌ها رو از ساختار Objectها جدا کن تا بتونی بدون تغییر کلاس‌های موجود، رفتارهای جدید بهشون اضافه کنی.
169+
170+
**سناریوی Mosh:** یک سند HTML با Nodeهای مختلف → عملیات highlight → تولید plain text و … → هر عملیات به‌صورت یک کلاس جدا تعریف می‌شه → Nodeها یک متد accept دارن که یک Visitor (Operation) رو می‌پذیره.
171+
172+
**نتیجه:** برای اضافه‌کردن یک رفتار جدید (مثل استخراج لینک‌ها، فیلتر صوتی و …) فقط یک Visitor جدید می‌نویسی؛ لازم نیست کلاس Nodeهای اصلی رو تغییر بدی.
173+
174+
؜Ask AI: Visitor Pattern
175+
176+
---
177+
178+
لینک دوره اصلی:
179+
<https://codewithmosh.com/p/design-patterns-part1>
180+
181+
---
182+
183+
## درباره خلاصه‌کننده
184+
185+
من Ali Sol هستم؛ Backend Developer.
186+
وب‌سایت: <https://alisol.ir>
187+
لینکدین: <https://www.linkedin.com/in/alisolphp>

0 commit comments

Comments
 (0)