الگو طراحی چیست؟
در برنامه نویسی معمولا یک سری مسئلههای ساده و شناخته شدهای داریم که بسیار زیاد اتفاق میافتند و تکراری هستند. در طول زمان برای این مسائل یک سری راه حل استاندارد و قابل تکرار نیز ارائه شده است که به آنها الگوهای طراحی میگوییم. الگوهای طراحي را میشود نوعی الگوی طراحی در برنامه نویسی تعریف کرد. شناخت این الگوها باعث تمایز یک برنامه نویس کاربلد از برنامه نویسان تازه کار میشود. یک الگو طراحی یک کد کاملی نیست که بشود آن را به خودی خود اجرا کرد بلکه رویکردی است که برای حل یک مسئله مورد استفاده قرار میگیرد. الگو طراحی یک قالب است که باید در شرایطی درست از آن استفاده کنیم.
دلایل استفاده از الگوهای طراحی
1⃣کاهش خطاها و مشکلات
2⃣کاهش میزان کدنویسی
3⃣افزایش قابلیت توسعه پذیری
4⃣افزایش انعطاف پذیری
5⃣افزایش سرعت وبسایت یا نرمافزار
6⃣افزایش مقیاس پذیری
انواع الگوهای طراحی
الگوهای طراحی سه نوع اصلی و یک نوع پیشرفته دارند:
✅ساختاری(Structural Design Pattern)
این دسته از الگوهای طراحی مربوط به ترکیب کلاسها و شیها میباشد که عبارتند از: compositr، adapter، decorator، bridge، facade، flyweight، proxy
✅سازنده یا ایجادی(Creational Design Pattern)
این الگو مشکلات مربوط به ساخت و نمونهسازی از شئیها را حل میکنند که از بین آنها میتوان به مچارد زیر اشاره کرد: adapter، factory method، prototype،abstract factory
✅رفتاری(Behavioral Design Pattern)
این الگوهای طراحی مجموعهای از راهکارهای کدنویسی مربوط به تعامل و ارتباط اشیا هستند ک شامل موارد زیر میشوند: meditor، command، iterator، strategy، chain of responsibility
✅همزمانی(Concurrency Design Pattern)
در زیر به بررسی برخی از الگوهای گفته شده میپردازیم.
معرفی الگوهای طراحی
🔎الگو طراحی singleton
اگر برنامه نویس باشید حتما عبارت الگوهای طراحی به گوشتان (Design patterns) خورده است. و حتی اگر آن را نشنیده باشید به شما اطمینان میدهیم که در کدهایتان از آنها به صورت ناخودآگاه استفاده کردهاید. الگوهای طراحی چیزی جز یک سری راه حل برای مسائل پرتکرار دنیای نرم افزار نیستند. در دنیای برنامه نویسی یک سری از چالشها و مشکلات تکراری و مشابه سر راه برنامه نویسان قرار میگرفت و بعد از مدت ها برای این چالشها پاسخهایی خوب و بهینه ارائه میشد که به آنها الگوهای طراحی گفته شد.
🔎الگو طراحی bridge
اگر بخواهیم انتراع و پیاده سازی را مستقل از هم توسعه بدهیم باید از الگوی bridge استفاده کنیم.
حالا الگوی bridge چطور این کار را انجام میدهد ؟
با تقسیم abstraction به دو تیکه و یکی برای فضای بیرونی کلاسها یا همون متدها همون چیزی که کلاینت آن را میبیند.
و بخش دوم برای پیاده سازی implementor یا bridge که پیاده سازی داخليه آن است.
🔎الگو طراحی composite
یک الگو طراحی ساختاری است که وقتی شما یک ساختار درختی دارید به کمک شما میآید. وقتی میخواهید از ساختار درختی در برنامه خود استفاده کنید این دیزاین پترن را فراموش نکنید.
🔎الگو طراحی abstract factory
این الگو به شما اجازه میدهد که مجموعهای از اشیا مرتبط را بدون نیاز به ساخت کلاسهای جداگانه و متعدد ایجاد کنید.
🔎الگو طراحی adapter
این الگو یک الگو طراحی ساختاری است که کار آن همانند دنیای واقعی میباشد و اجازه میدهد دو رابط ناسازگار بتوانند باهم سازگار شوند. مثلا برای اینکه بتوانیم موبایل خود را شارژ کنیم نیاز به یک آداپتوری داریم که برق شهر ۲۲۰ را به ولتاژ قابل استفاده باتری موبایل تبدیل کند.
🔎الگو طراحی facade
یک الگو طراحی ساختاری است که یک رابط ساده برای یک کتابخانه، یا کلاسهای پیچیده فراهم میکند.
🔎الگو طراحی decorator
یک الگو طراحی ساختاری است که به شما کمکمیکند بدون اعمال تغییراتی به ساختار شی رفتار یا عملکردی به آن اضافه کنید.
🔎الگو طراحی builder
یک الگو طراحی سازنده است که با هدف تسهیل ساخت اشیا پیچیده در طراحی نرمافزار به کار برده میشود. این الگو به شما کمک میکند که پیچیدهترین اشیا را به صورت گام به گام و به وسیله اشیا سادهتر ایجاد کنید. سپس میتوانید انواع مختلفی از یک شی را با استفاده از همان ساختار پایه تولید کنید.
🔎الگو طراحی factory methode
این الگو پیچیدگی ایجاد اشیاء برای استفاده کننده را پنهان میکند. با این الگو میتوانیم بدون اینکه کلاس دقیق یک شیئ را مشخص کنیم ، آن را ایجاد کنیم. کلاینت ( استفاده کننده ) معمولا شيئ واقعی را ایجاد نمیکند بلکه با یک واسط و یا کلاس انتزاعی در ارتباط است و كل مسئولیت ایجاد کلاس واقعی را به آن میسپارد. از Creator مزایای این الگو این است که اگر در نحوه ایجاد اشياء تغییری رخ دهد هیچ نیازی به تغییر در کد کلاینتها نخواهد بود. در این الگو اصل را به خوبی رعایت میشود چون که مسئولیت ایجاد DIP زیرکلاسها از دوش کلاینت برداشته میشود.
🔎الگو طراحی fly weight
به معنای سبک وزن است. هدف اصلی این الگو بهینه سازی مصرف رَم است. یعنی مدیریت اشیا برای اینکه از رم کمتر استفاده کنند.
🔎الگو طراحی prototype
به این اشاره دارد که یک نوع نمونه سازی انجام دهید. یعنی زمانی که شما شی دارید که ساخت آن هزینهبر بوده به جای اینکه آن عملیات را دوباره انجام دهید. آن یک تیکه از واسطه را کلا میتوانید کپی کنید.
🔎الگو طراحی interpreter
به معنی مفسر است و کار آن شبیه به یک مفسر زبان است درواقع برای AST استفاده میشود. AST همانی است که در ساختمان داده، شما یک رشته را تبدیل به یک ساختار درختی میکنید. بعد، از همین درخت تفسیر میکنید که چه عملیاتی باید انجام دهید.
🔎الگو طراحی template method
الگوی سادهای است و یکی از موارد مهمی که پوشش میدهد استفاده مجدد از کدهاست. معمولا از این الگو به طور عمومی در کتابخانهها و فریمورکها استفاده میشود.
دیدگاهتان را بنویسید