الگوی طراحی چیست : الگوی طراحی یا دیزاین پترن راه حل هایی برای مشکلات رایج در طراحی نرم افزارها هستند. شناخت این الگوها باعث تمایز یک برنامه نویس حرفه ای از برنامه نویسان معمولی میشود. مهم نیست با چه زبان برنامه نویسی کدنویسی میکنید، شناخت و استفاده از این الگوها در طراحی نرم افزارها میتواند کمک بسیار زیادی به شما برای ایجاد نرم افزارها کند. پس به شما توصیه میکنیم مطالعه ادامه این را به هیچ عنوان از دست ندهید.
الگوی طراحی یا دیزاین پترن چیست؟
در طول زمان برنامه نویسان برای توسعه نرم افزارها با مشکلات مختلفی مواجه میشدند. بسیاری از این مشکلات مستقل از زبانهای برنامه نویسی و مشابه هم بودند. بنابراین برای حل این مشکلات راه حلهای مختلفی ارائه شد که به بهترین روش حل و رفع این مشکلات الگوهای طراحی یا Design Pattern می گویند. به عبارت دیگر مجموعه ای از بهترین راه حلهای مشکلات متداول در فرآیند برنامه نویسی نرم افزار را الگوهای طراحی مینامند. دیزاین پترن ها برای حل مشکلات رایج در برنامه نویسی شی گرا به وسیله برنامه نویسانی باتجربه توسعه داده شده اند.
الگوهای طراحی جزو معماریهای نرم افزاری نیستند و فقط شیوه ای صحیح از کدنویسی شی گرا را ارائه میدهند. بنابراین این الگوها فقط در قلمرو کدنویسی شی گرا وارد میشوند و مستقل از زبانهای برنامه نویسی هستند.
تاریخچه الگوهای طراحی
الگوهای طراحی اولین بار توسط کریستوف الکساندر (Christopher Alexander) ارائه شدند. کریستوف الکساندر از الگوهای طراحی تحت عنوان راه حل هایی برای مشکلاتی یاد میکرد که به صورت متداول در فرآیند برنامه نویسی رخ میدهند. در سال 1994 گروهی به اسم Gang of Four که اعضای آن را اریک گاما، ریچارد هلم، رالف جانسون، جام ولیسایدز تشکیل میدادند، الگوهای طراحی را از نظر کاربرد طبقه بندی کردند. گروه Gang of Four یا به اختصار GOF، این الگوها را در قالب کتابی به نام الگوهای طراحی منتشر کردند. این کتاب 23 تا از الگوهای طراحی را به سه دسته کلی تقسیم بندی کرده و به معرفی و آموزش آنها پرداخته است.
گاما و همکارانش در این کتاب برای معرفی هر یک از الگوهای طراحی ساختار خاصی را در نظر گرفته اند. آنها از معرفی الگوهای طراحی به صورت تصویری خودداری کرده اند. زیرا بر این اعتقاد بودند که معرفی الگوهای طراحی نیازمند ساختاری جدید و اختصاصی است. بنابراین ساختار زیر را به منظور ارائه بهتر دیزاین پترنها طراحی کردند. اجزای اصلی این ساختار عبارتند از :
نام و طبقه بندی: نام الگو و توصیفی کوتاه از آن را بیان میکند.
هدف: در این بخش به صورت مختصر توضیحاتی در مورد هدف از ارائه الگو مطرح شده است.
نام دیگر: اگر الگوی طراحی با نامهای دیگری شناخته شده باشد در این بخش آنها معرفی میشوند.
راه حل: این قسمت به سناریویی که در آن از الگوی طراحی استفاده شده باشد و نحوه استفاده از کلاسها و شیها برای حل مشکل مد نظر میپردازد.
کاربرد: در این بخش توصیف میشود که الگوی مورد نظر در چه شرایطی کاربرد خواهد داشت.
ساختار: در این بخش ساختار اصلی الگوهای طراحی با استفاده از UML نمایش داده می شوند.
کلاسها و اشیای مورد استفاده: مسئولیت کلاسها یا اشیایی که در الگوی طراحی استفاده میشوند در این بخش نوشته میشوند.
نحوه همکاری: چگونگی همکاری کلاسها و شیها در این قسمت مشخص میشود.
روش پیاده سازی: در این بخش مراحل پیاده سازی مطرح میشوند.
کد نمونه: در این بخش مثالها در قالب زبانهای برنامه نویسی نشان داده شده اند.
مثالهای کاربردی: در این بخش مثال هایی کاربردی از الگوی طراحی ذکر میشوند.
ارتباط الگوی طراحی با سایر الگوها: بخشها مرتبط الگوی طراحی با سایر الگوها در این بخش مورد بررسی قرار میگیرد.
انواع الگوهای طراحی در مهندسی نرم افزار
الگوهای طراحی با توجه به کاربردها و اهدافی که به آن منظور ارائه شده اند، به سه دسته عمومی Creational Design Patterns، Structural Design Patterns، Behavioral Design Patterns تقسیم میشوند.
الگوهای طراحی سازنده (Creational Design Patterns)
به الگوهای طراحی که برای حل مشکلات مربوط به ایجاد اشیا در نرم افزار ارائه شده اند، الگوهای طراحی سازنده یا Creational میگویند. متداولترین دیزاین پترنهای سازنده عبارتند از :
الگوهای طراحی ساختاری یا Structural، مجموعه ای از راه حل هایی هستند که برای حل مشکلات توسعه پذیری ساختار نرم افزارها، به کمک برنامه نویسان میآیند. این دیزاین پترنها برای مدیریت ارتباط میان کلاسها و شیها با یکدیگر استفاده میشوند. این الگوهای طراحی عبارتند از :
Adapter
Decorator
Facade
Bridge
Composite
Flyweight
Proxy
الگوهای طراحی رفتاری (Behavioral Design Patterns)
الگوهای طراحی رفتاری یا Behavioral مجموعه ای از راهکارهای کدنویسی مربوط به تعامل و ارتباط اشیا هستند. این الگوهای طراحی عبارتند از:
می توان با این دیدگاه به دیزاین پترنها نگاه کرد که استفاده از آنها در حقیقت، بهره مندی از تجارب و تخصص بهترین برنامه نویسان شی گرا در فرآیند کدنویسی است. برخی بر این باور هستند که مشکلاتی مانند استفاده زیاد از کلاس ها، طراحی ضعیف و... جزو مشکلات بنیادی برنامه نویسی شی گرا است. دیزاین پترنها با شناخت صحیح اصول برنامه نویسی شی گرا مزایای زیادی را در اختیار برنامه نویسان قرار میدهند. از جمله مهمترین مزایای استفاده از آنها میتوان به موراد زیر اشاره کرد:
افزایش مقیاس پذیری (scalability)
افزایش قابلیت توسعه پذیری (expandability)
افزایش انعطاف پذیری (flexibility)
افزایش سرعت توسعه نرم افزارها
کاهش خطاها و مشکلات
کاهش میزان کدنویسی
کی و کجا باید از الگوهای طراحی استفاده کنیم؟
اینکه بدانیم کی و کجا باید از الگوهای طراحی استفاده کنیم، یکی از سوالهای رایج در میان برنامه نویسان است. از آنجایی که هر الگوی طراحی برای کاربردی مشخص و حل مشکلی خاص در فرآیند برنامه نویسی ارائه داده شده است، باید بتوانیم آن مشکلات را در زمان توسعه نرم افزار شناسایی کنیم. پس از شناسایی و تشخیص این گونه مشکلات، باید نحوه استفاده از دیزاین پترنهای ارائه شده برای حل آنها را آموزش ببینیم تا بتوانیم از آنها استفاده کنیم.
نتیجه گیری
شناخت مفاهیم الگوهای طراحی برای همه برنامه نویسان یک ضرورت به شمار میآید. زیرا الگوهای طراحی با هدف رفع مشکلات رایج کدنویسی و استاندارد ساختن فرآیند توسعه نرم افزار ارائه شده اند. برنامه نویسان با به کارگیری الگوهای طراحی قادر هستند نرم افزارهای انعطاف پذیر، قابل توسعه و مقیاس پذیر بسازند که به صورت اصولی طراحی شده اند. آیا تاکنون از الگوهای طراحی استفاده کرده اید؟ به نظر شما مهمترین مزیت استفاده از الگوهای طراحی در کدنویسی شی گرا چیست؟
۲۰ دیدگاه
عرشیا عموزاد۱۷ شهریور ۱۴۰۳، ۱۳:۲۹
خیلی مفید بود.
۰۴ بهمن ۱۴۰۱، ۱۷:۳۸
متنی قابل فهم ,مفید,کوتاه وعالی
سون لرن دوست داشتنی
۱۰ دی ۱۴۰۱، ۰۹:۴۵
سلام وقت بخیر
به تاریخ کامنتها رو که نگاه میکردم همه برای یک سال گذشته بود ، یک سال زمانی خوبی بود که این مقاله رو کامل کنید ، منظور هر یک از الگوها رو توضیح میدادید ، باز گذشت یک سال وقتی به این مقاله مراجعه که میکنیم هنوز کامل نشده
نازنین کریمی مقدم۱۶ دی ۱۴۰۱، ۱۴:۳۲
درود
بابت تاخیر عذرخواهی میکنم تا ارجاع کامنت شما، بررسی و دریافت پاسخ کمی زمانبر بود.
حقیقتا بسته به نیاز و درخواست کاربران ما تصمیم گرفتیم تا الگوهای طراحی رو بسته به زبان بررسی و تخصصیتر توضیح بدیم و در همین راستا دو دوره دیزاین پترن در php و دیزاین پترن در تایپ اسکریپت رو تدوین کردیم.
بعد از اون چون درخواست جدیدی نداشتیم و سایر دوستان هم از کیفیت کار رضایت داشتند، دیگه کار آپدیت این دسته مقالات از اولویت خارج شد و سراغ مباحث شروع برنامه نویسی رفتیم که از سمت کاربران تقاضای بسیار بیشتری داشت.
بعد از اینکه تدوین مقالات با اولویت بالاتر رو اوکی کردیم، در صورت تایید تیم محتوایی اگر همچنان درخواستی روی مفاهیم اولیه دیزاین پترن بود، این دسته مقالات رو ویرایش میکنیم.
ممنون که با ما همراه هستید.
۱۳ اسفند ۱۴۰۰، ۱۳:۲۴
عالی
۲۷ دی ۱۴۰۰، ۱۷:۱۵
از مقاله تون اسفاده کردم.
فقط امکان داره در مورد الگوهای معماری زیر :
adapter
decorator
facade
bridge
composite
flyweight
proxy
هم توضیح بدید. لطفا
۱۶ دی ۱۴۰۰، ۰۸:۴۸
سلام لطفا این مطلب مفید رو ادامه بدید .
ایا این امکان وجود دارد که ادامه دیزاین پترنها را کاربران دیگر ادامه دهند .
با تشکر از مطلب خوب و مفید تون
نازنین کریمی مقدم۱۷ دی ۱۴۰۰، ۱۳:۱۰
درود
مطمئن باشید جزو مطالبی هست که در تقویم محتوایی مون برای به روز رسانی قرار داره، اما اگر در بخش نظرات ادامه شون رو هم بنویسید تایید میشه و به اشتراک گذاشته میشه.
hesam davarpanah۳۰ آبان ۱۴۰۰، ۱۱:۰۶
واقعا عالی بود و ایده آل میشد اگر برای زبانهای دیگه هم مثال داشت
Nazanin KarimiMoghaddam۳۰ آبان ۱۴۰۰، ۱۱:۴۵
درود
برای سایر زبانها چون یکم وارد بحث تخصصی میشد و ممکن بود برای برخی دوستان ناآشنا باشه نیوردیم.
سپاس از فیدبکتون :)
امیرحسین عنبری۱۷ مهر ۱۴۰۰، ۱۴:۱۹
عالی بود
AMD۰۵ اردیبهشت ۱۴۰۰، ۱۶:۳۸
بسیار عالی و کارامد بود.
با تشکر از زحمت شما .
محسن۰۲ بهمن ۱۳۹۹، ۰۶:۰۷
سلام
ممنون بایت مقالههای خوب الگوهای طراحی واقعا عالیه
اما چرا دیگه مقاله ایی در این خصوص منتشر نمیکنید ؟ آخرین الگویی که توضیح دادین builder بود و دیگه بعد از اون ادامه پیدا نکرد ...
نازنین کریمی مقدم۰۳ بهمن ۱۳۹۹، ۱۹:۰۸
درود.
حقیقتا سایر الگوها در لیست مقالات آینده مون هست و به زودی ادامه این سری مقالات رو منتشر میکنیم. ممنون که با ما همراه هستید.
adnan۲۲ دی ۱۳۹۹، ۱۳:۵۱
سلام خسته نباشید به جرئت میتونم بگم یکی از بهترین سایتهای ایرانی حال حاضر میباشد .
میشه لطف کنید در مورد الگوهای طراحی :
Composite و Adaptor و Proxy و Decorator و Facade و DI و Strategy و observer
مطالبی بزارید ممنون میشم
نازنین کریمی مقدم۲۳ دی ۱۳۹۹، ۰۷:۲۹
سلام.
خوشحالیم که مقالات مقید بودند :)
حقیقتا نوشتن سری مقالات الگوهای طراحی و آپدیت مقالات قبلی این حوزه در تقویم کاری مقالات بعدیم هست، به مخض اتمام مقالات بازی سازی حتما استارتشو میزنم. مطمئن باشید که موضوعات درخواستی تون رو حتما پوشش میدیم.
حسن ناظم۰۹ مهر ۱۳۹۹، ۱۱:۱۸
خیلی عالی بود لطفا سمپل پیاده سازی هم اگر میتونید بزارید ممنون
نازنین کریمی مقدم۰۹ مهر ۱۳۹۹، ۱۷:۲۰
سلام. شما میتونید از منوی مطالب پیشنهادی در کنار مقاله، الگوی موردنظرخودتون رو انتخاب و نمونه پیاده سازیش رو مطالعه کنید.
مسعود۰۶ مرداد ۱۳۹۹، ۱۵:۳۲
ممنونم ازتون
محمد۰۵ آبان ۱۳۹۸، ۱۶:۲۸
سلام. تو این همه سایت ایرانی گشتم، هیچ جایی مثل این سایت در مورد الگوهای طراحی توضیح ساده و روان داده نشده. ای کاش جزئیات بقیه الگوها رو هم آموزش میدادید.