
Design Pattern به زبان ساده
در سال 1994 گروه 4 نفره Gang of Four که به اختصار با نام GOF شناخته میشوند 23 الگوی طراحی را، طبقه بندی و ارائه کردند.
مفهوم الگوهای طراحی در برنامه نویسی به طور گسترده ای به گروه Gang of Four - اریش گاما، ریچارد هلم، رالف جانسون، و جان ولیسیدز نسبت داده می شود که این ایده را از طریق کتاب خود "الگوهای طراحی: عناصر نرم افزار شی گرا قابل استفاده مجدد" رایج کردند. منتشر شده در سال 1994
در این جدول سعی کردم همشون و به زبون ساده و بدون اشاره به زبون خاصی توضیح بدم. با هر زبان برنامه نویسی که object oreinted باشه میشه این پترنها رو پیاده سازی کرد. اگر جایی براتون گنگ هست بگید تا با مثال کدی بیشتر توضیح بدم
Factory Method درجه استفاده :5 Creational |
کلاس پایه داریم به اسم product و کلی subclass |
Abstract Factory درجه استفاده :5 Creational |
یه level بالاتر از فکتوری متد هست.
|
Facade درجه استفاده :5 Structural |
ترکیب چند کلاس کوچیک و اجرا توابع آن بر اساس ترتیب |
Iterator درجه استفاده :5 Behavior |
راهکاری برای دسترسی مدام به attrbuteها کلاس aggregate بدون افشای نمایندگی ان |
Observer درجه استفاده :5 Behavior |
زمانی که میخواهیم اگر تغییری در ابجکیتی رخ داد بقیه کلاسها متوجه بشن استفاده میشه ابجکت ما (کلاس subject) متدی به اسم attach داره که ورودی از نوع observer میگیره و در لیست observerهاش قرار میده. و متدی به اسم notify() که در یک loop میاد متد update همه آبزرورهاش رو call میکنه و همین notify چه زمانی call میشه؟زمانی که پراپرتی مقدارش تغییر کنه و ما بخواهیم بقیه با خبر بشن (مثلن در setter پراپرتی نوشته بشه خوبه) |
Singleton درجه استفاده :4 Creational |
ساخت فقط یک شی از کلاس در برنامه |
Adapter درجه استفاده :4 Structural |
|
Composite درجه استفاده :4 Structural |
برای ایجاد ساختار tree مانند استفاده میشه
|
Proxy درجه استفاده :4 Structural |
چیزی شبیه wraper هست. Client هم در اصل proxy رو new میکنه و باهاش کار میکنه
|
Command درجه استفاده :4 Behavior |
|
Strategy درجه استفاده :4 Behavior |
چندین استراتژی برای اجرای یک عملیات داریم هر کدام در کلاس جدا پیادهسازی میشود و کلاس استفاده کننده ابجکتی از نوع استراتژی داره که در ctor بهش پاس داده میشه و همون و کال میکنه
|
NET Template درجه استفاده :3 Behavior |
در اصل شما کلیت الگوریتم رو توالی کال کردن توابع رو تو کلاس parent مینویسی(که abstract هست) و جزعیات پیاده سازی توابع در subclass ها پیاده سازی میشن (در اصل توابع هم override شده هستن که در کلاس patent بصورت abstarct تعریف شده بودند) |
NET Prototype درجه استفاده :3 Creational |
|
NET Bridge درجه استفاده :3 Structural |
|
NET Decorator درجه استفاده :3 Structural |
|
NET State درجه استفاده :3 Behavior |
به کلاس اجازه میده رفتارش رو با توجه به stateی که پراپرتیهاش دارن تغییر بده
|
Builder درجه استفاده :2 Creational |
|
Mediator درجه استفاده :2 Behavior |
کلاس پابلیشر متد send وlisten داره و یه ابجکت ار نوع mediator.
برای پیاده سازی listener و publisher بکار میره
|
Chain of Resp درجه استفاده :2 Behavior |
برای زمانی که کاری مثل کارتابل داریم . مراحل جدا نوشته میشن که همشون از یک کلاس پایه ارث بری میکنن و هر مرحله مرحله بعدی خودش رو میدونه کلاس Handler با کلی subclass که پراپرتی از جنس خودش داره به اسم successor و 2 تابع SetSuccessor که کارش مقداردهی successor هست و abstract HandleRequest که توسط subclassها پیاده سازی میشه و توی اون مشخص میشه در چه شرطی تابع HandleRequest پراپرتی successorش اجرا بشه(که بضورت chan میره تا اخر این قسمت) |
Flyweight درجه استفاده :1 Structural
|
|
Interpreter درجه استفاده :1 Behavior |
کلاسی به اسم context دارم و کلاسی به اسم interpreter که کلی subclass داره. |
Memento درجه استفاده :1 Behavior |
|
Visitor درجه استفاده :1 Behavior |
|
نکته:💡 بعضی از اینا شاید تو یعضی زبانها الان دیگه واقعن به این شکل نوشته نشن و بجاشون از ابزارهایی که وجود داره استفاده بشه . برای مثال singletone نوشتن کلاسها شاید (فقط شاید) دیگه اینجوری نیست چون چرخه حیاط اینها با ioc هندل میشن. یا بجای mediator در دانت ابزار mediatR هست و .....
ولی در هر صورت دونستنشون میتونی بسیار مفید باشه و به ما تو برنامه نویسی بهتر کمک کنه