خانه / برنامه نویسی / آشنایی با الگوهای طراحی یا همان Design Patterns
الگوهای طراحی
الگوهای طراحی
1 ستاره2 ستاره3 ستاره4 ستاره5 ستاره (1 رای, میانگین: 5,00 از 5)
Loading...

آشنایی با الگوهای طراحی یا همان Design Patterns

الگوهای طراحی در حقیقت راه حل هایی برای مشکلات پر تکرار در برنامه نویسی شی گرا هستند که به سبب تکرار زیاد این مشکلات، راه حل های ثابتی برای حل آن که همان Design pattern ها هستند به وجود آمده است. هر Design Patterns یک ساختار حل مشکل در اختیار شما قرار می دهد که می تواند در موقعیت های مختلف مورد استفاده قرار گیرد و در سطح طراحی روی نرم افزار مطرح شود. الگوهای طراحی نمونه ای از بهترین راه حل ها برای برطرف کردن مشکلات در طراحی نرم افزار هستند.

الگوهای طراحی

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

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

انواع الگوهای طراحی

الگوهای طراحی به سه دسته Creational Design Patterns ،Structural Design Patterns و Behavioral Design Pattern  تقسیم می شوند.

Creational design patterns

این دسته از الگوهای طراحی با ساخت کلاس ها و شی ها می باشند و شامل الگوهای طراحی زیر هستند:

۱-Abstract Factory : راهی برای کپسوله کردن گروهی از Factory ها که یک ساختار مشترک دارند بدون توجه به پیاده سازی آن ها در اختیار قرار می دهد.

۲-Builder: یک راه حل منعطف برای مشکلات ساخت و ایجاد اشیا ارائه می دهد.

۳-Factory Method: یک interface برای ساخت یک شی تعریف می کند اما به کلاس های زیر مجموعه اجازه می دهد که تصمیم بگیرند شیء از کدام کلاس ایجاد شود.

۴-Object Pool:به جای اختصاص لحظه ای و حذف شی بعد از استفاده، اجازه استفاده از مجموعه اشیا ساخته شده و آماده استفاده را  می دهد.

۵-Prototype:  اجازه حذف پیچیدگی ساخت اشیا از کلاینت را می دهد.

۶-Singleton: امکان محدود کردن ساخت یک شی از کلاس را می دهد به طوری که از یک کلاس خاص نتوان بیشتر از یک شی ساخت.

Structural design patterns

این دسته از الگوهای طراحی مربوط به ترکیب کلاس ها و شی ها می باشند و شامل Design pattern های زیر هستند:

۱-Adapter: امکان تبدیل Interface یک کلاس را به Interface مورد انتظار client می دهد.

۲-Bridge: امکان جداسازی انتزاع از پیاده سازی را فراهم می کند.بنابراین این دو می توانند مستقل و متفاوت باشند.

۳-Composite: اشیا را به منظور نمایش سلسله مراتبی تبدیل به ساختار درختی می کند.

۴-Decorator: امکان اضافه کردن عملکرد به اشیا به صورت dynamic را فراهم می کند.

۵-Façade: یک سطح بالاتری از interface به منظور راحتی استفاده زیر سیستم ها فراهم می کند.

۶-Flyweight: برای کاهش تعداد شی های ساخته شده همچنین کاهش استفاده از RAM و در نتیجه افزایش کارایی است.

۷-Private class data: برای کنترل دسترسی عمل write در attribute های یک کلاس استفاده می شود. همچنین داده را از متد های استفاده کننده از آن جدا می کند.

۸-Proxy: یک کلاس عملکرد کلاس دیگر را فراهم می کند.

Behavioral design patterns

این دسته از الگوهای طراحی به روابط بین object ها می پردازد و شامل موارد زیر است:

۱-Chain of Responsibility: جلوگیری از ایجاد if else های متوالی و همچنین امکان داینامیک بودن شرایط را فراهم می کند.

۲-Command:  امکان کپسوله سازی یک ریکوئست به عناون یک object را فراهم می کند و از طریق آن می توان فرامینی مانند undo کردن request را اجرا نمود.

بیشتر بخوانید :

معماری و طراحی نرم افزار چه تفاوت هایی دارد؟

۳-Interpreter: راهی جهت ارزیابی کردن دستور (گرامر) زبان را فراهم می کند.

۴-Iterator:  یک design pattern با کاربرد بالا، در جاوا و .Net می باشد. این الگوی طراحی امکان استفاده از المان های یک collection را به ترتیب فراهم می کند بدون اینکه client درگیر مواردی همچون دانستن تعداد خانه های یک collection شود.

کپسوله کردن

۵-Mediator: یک شی به منظور کپسوله کردن روابط بین اشیا ایجاد می کند.

۶-Memento:امکان restore کردن حالت یک شی به حالت قبلی را فراهم می کند. (save در بازی های کامپیوتری از این منطق پیروی می کند.)

۷-Null Object: یک عملکرد پیش فرض برای کیس هایی که دیتا در دسترس ندارند فراهم می کند و کاربرد آن در تست نرم افزار است.

۸-Observer: الگوی طراحی Observer یک رابطه یک به چند بین اشیاء تعریف می کند و زمانی که حالت یک شیء تغییر می کند بقیه اشیاء نیز متوجه تغییر حالت شده و متناسب با آن می توانند تغییر کنند.

۹-State: رفتار یک کلاس با توجه به تغییر state داخلی آن می تواند تغییر کند.

۱۰-Strategy: الگوی طراحی استراتژی (Strategy Design Pattern) امکان تعریف خانواده ای از یک الگوریتم را فراهم و کپسوله سازی می کند و امکان استفاده از هر الگوریتم به جای الگوریتم دیگر را فراهم می کند. مانند الگوریتم های مختلف مرتب سازی.

۱۱-Template Method: امکان تغییر برخی مراحل یک الگوریتم توسط زیر کلاس ها بدون تغییر structure کلی آن الگوریتم را فراهم می کند.

۱۲-Visitor:  امکان تغییر اجرای یک الگوریتم یک المان کلاس را فراهم می کند.

منابع:

۱- sourcemaking

عالی بود(1)جالب نیست!(0)

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

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

4 + یازده =