الگوی طراحی یا دیزاین پترن راه حل هایی برای مشکلات رایج در طراحی نرم افزارها هستند. شناخت این الگوها باعث تمایز یک برنامه نویس حرفه ای از برنامه نویسان معمولی میشود.
در طول زمان برنامه نویسان برای توسعه نرم افزارها با مشکلات مختلفی مواجه میشدند. بسیاری از این مشکلات مستقل از زبانهای برنامه نویسی و مشابه هم بودند. بنابراین برای حل این مشکلات راه حلهای مختلفی ارائه شد که به بهترین روش حل و رفع این مشکلات الگوهای طراحی یا Design Pattern می گویند. به عبارت دیگر مجموعه ای از بهترین راه حلهای مشکلات متداول در فرآیند برنامه نویسی نرم افزار را الگوهای طراحی مینامند. دیزاین پترن ها برای حل مشکلات رایج در برنامه نویسی شی گرا به وسیله برنامه نویسانی باتجربه توسعه داده شده اند.
الگوهای طراحی با توجه به کاربردها و اهدافی که به آن منظور ارائه شده اند، به سه دسته عمومی Creational Design Patterns، Structural Design Patterns، Behavioral Design Patterns تقسیم میشوند.
به الگوهای طراحی که برای حل مشکلات مربوط به ایجاد اشیا در نرم افزار ارائه شده اند، الگوهای طراحی سازنده یا Creational میگویند. متداولترین دیزاین پترنهای سازنده عبارتند از :
الگوهای طراحی ساختاری یا Structural، مجموعه ای از راه حل هایی هستند که برای حل مشکلات توسعه پذیری ساختار نرم افزارها، به کمک برنامه نویسان میآیند. این دیزاین پترنها برای مدیریت ارتباط میان کلاسها و شیها با یکدیگر استفاده میشوند. این الگوهای طراحی عبارتند از :
الگوهای طراحی رفتاری یا Behavioral مجموعه ای از راهکارهای کدنویسی مربوط به تعامل و ارتباط اشیا هستند. این الگوهای طراحی عبارتند از:
می توان با این دیدگاه به دیزاین پترنها نگاه کرد که استفاده از آنها در حقیقت، بهره مندی از تجارب و تخصص بهترین برنامه نویسان شی گرا در فرآیند کدنویسی است. برخی بر این باور هستند که مشکلاتی مانند استفاده زیاد از کلاس ها، طراحی ضعیف و... جزو مشکلات بنیادی برنامه نویسی شی گرا است. دیزاین پترنها با شناخت صحیح اصول برنامه نویسی شی گرا مزایای زیادی را در اختیار برنامه نویسان قرار میدهند. از جمله مهمترین مزایای استفاده از آنها میتوان به موراد زیر اشاره کرد:
نوع دیزاین پترن | نام دیزاین پترن | کاربرد دیزاین پترن |
ایجادی | Singleton | یک کلاس تنها یک نمونه از خود میتواند داشته باشد و امکان ساخت بیش از یک نمونه از آن را محدود میکند. |
ایجادی | Factory Method | این الگو برای ایجاد یک روش متفاوت برای ایجاد نمونههای یک کلاس و اجازه دادن به زیرکلاسها برای تعیین نوع نمونههای ایجاد شده، استفاده میشود. |
ایجادی | Prototype | این الگو برای ایجاد نمونههای جدید از یک کلاس با استفاده از کپیبرداری از یک نمونه موجود، بدون نیاز به ساخت مجدد آن کلاس، استفاده میشود. |
ایجادی | Abstract Factory | برای ایجاد یک خانواده از اشیاء مرتبط و متعلق به یک مجموعه موضوعی با استفاده از یک واسط مشترک، بدون وابستگی به کلاسهای خاص، استفاده میشود. |
ایجادی | Builder | این الگو فرایند ساخت یک شیء را از نمایش آن جدا کرده تا بتوان همان فرایند ساخت را برای ایجاد نمایشهای مختلف بکار برد. |
ایجادی | Object Pool | برای بهبود عملکرد و کارایی برنامه با استفاده مجدد از اشیاء ساخته شده قبلی، به جای ساخت مجدد آنها، از اشغالسازیهای سنگین منابع دوری میکند. |
ساختاری | Adapter | برای اتصال و تبدیل رابط یک کلاس به رابطی دیگر که ساختار و نحوه عملکرد آن متفاوت است، استفاده میشود و امکان همکاری بین اشیائی که قبلاً بخاطر داشتن رابطهای ناسازگار نمیتوانستند با هم کار کنند را فراهم میسازد. |
ساختاری | Decorator | این الگو برای افزودن ویژگیها و عملکردهای جدید به یک شیء بدون تغییر در رابطهی آن شیء، استفاده میشود. |
ساختاری | Facade | این الگو برای ایجاد یک رابط سادهتر و یکپارچهتر برای دسترسی به یک زیرسیستم پیچیدهتر، استفاده میشود. |
ساختاری | Bridge | برای جدا سازی یک مجموعه از کلاسها از رابط آنها و امکان تغییر آنها به صورت مستقل، استفاده میشود. |
ساختاری | Composite | این الگو برای ایجاد ساختاری سلسلهمراتبی از اشیاء به صورت گرافیکی و امکان استفاده یکسان از اشیاء تکی و گروهی، استفاده میشود. |
ساختاری | Flyweight | برای کاهش مصرف حافظه و بهبود عملکرد با به اشتراک گذاری اشیاء کوچک و مشابه در سطح سیستم، استفاده میشود. |
ساختاری | Proxy | برای ایجاد یک نمایندهای بین کاربر و یک شیء دیگر برای کنترل دسترسی، اضافه کردن قابلیتهای اضافی و مدیریت عملکرد، استفاده میشود. |
رفتاری | Chain of responsibility | این الگو برای ارائه روشی برای پردازش درخواستها توسط یک زنجیره از شیءها و امکان انتقال درخواست بین آنها، استفاده میشود. |
رفتاری | Strategy | برای انتخاب یکی از چندین روش متفاوت برای انجام یک عملیات خاص و قابل تعویض آن، استفاده میشود. |
رفتاری | Iterator | این الگو برای ارائه روشی برای دسترسی به عناصر یک مجموعه به صورت مرتب و متوالی بدون افشای جزئیات ساختار داده، استفاده میشود. |
رفتاری | Command | یک درخواست را به صورت یک شیء کپسولسازی میکند و این امکان را فراهم میسازد تا مشتریها را با درخواستهای متفاوت پارامتردهی، صف بندی یا Log کرده و قابلیت برگشت به عقب را فراهم میکند. |
رفتاری | Mediator | این الگو برای کاهش وابستگی بین اجزای یک سیستم و ایجاد یک شیء واسطه برای مدیریت و ارتباط بین آنها، استفاده میشود. |
رفتاری | Memento | برای ذخیره و بازیابی وضعیت یک شیء بدون نیاز به افشای جزئیات پیادهسازی، استفاده میشود. |
رفتاری | Observer | یک نوع وابستگی یکبهچند بین اشیاء تعریف کرده بطوری که وقتی یک شیء حالتش را تغییر داد، تمام اشیاء وابسته به آن خبردار شده تا آنها نیز خود را با آن تغییر هماهنگ کنند. |
رفتاری | State | این الگو اجازه میدهد تا یک شیء هنگامی که حالتش عوض شد، رفتارش را تغییر دهد. اشیاء از این نوع رفتار کلاسی که در آن قرار دارند را تغییر میدهند. |
رفتاری | Template Method | اسکلت کلی یک الگوریتم را تعریف کرده و پیادهسازی بعضی قدمهای آن را به زیر کلاسها محول میکند. این الگو امکان تغییر بعضی از قدمهای یک الگوریتم را بدون تغییر در ساختار کلی الگوریتم به زیر کلاسها میدهد. |
رفتاری | Visitor |
این الگو برای اضافه کردن عملیاتهای جدید به یک ساختار شیءی بدون تغییر در کلاسهای مربوطه و جداسازی عملیات از ساختار، استفاده میشود. |
شناخت مفاهیم الگوهای طراحی برای همه برنامه نویسان یک ضرورت به شمار میآید. زیرا الگوهای طراحی با هدف رفع مشکلات رایج کدنویسی و استاندارد ساختن فرآیند توسعه نرم افزار ارائه شده اند. برنامه نویسان با به کارگیری الگوهای طراحی قادر هستند نرم افزارهای انعطاف پذیر، قابل توسعه و مقیاس پذیر بسازند که به صورت اصولی طراحی شده اند. آیا تاکنون از الگوهای طراحی استفاده کرده اید؟ به نظر شما مهمترین مزیت استفاده از الگوهای طراحی در کدنویسی شی گرا چیست؟
اگر متخصص سئو یا علاقه مند به کار فریلنسری هستید در سایت دور کاری بیت جاب میتوانید ثبت نام کنید و پروژه سئو، پروژه پایتون، پروژه طراحی سایت یا حتی پروژه تایپ و پروژه ترجمه بگیرید و از طریق دورکاری کسب درامد کنید
انجام پروژه دورکاری اینترنتی و کاریابی آنلاین و استخدام فریلنسر و دورکار