دیزاین پترن چیست؟
دیزاین پترن چیست؟

در برنامه‌نویسی معمولا یک سری مسئله‌ های خیلی ساده و شناخته شده‌ای داریم که بسیار پر رخداد و تکراری هستند. برای حل این مسئله‌ها هرکسی احتمالا یک راه‌حلی ارائه می دهد. در طول زمان برای این مسائل یک سری راه‌حل استاندارد و قابل تکرار نیز ارائه شده است که به آن ها الگوهای طراحی می گوییم.

دیزاین پترن (Design Pattern) را می شود نوعی الگوی طراحی در برنامه نویسی تعریف کرد.

یک Design Pattern یک کد کاملی نیست که بشود آن را به خودی خود اجرا کرد بلکه رویکردی است که برای حل یک مسئله مورد استفاده قرار می گیرد . به عبارت دیگر یک دیزاین پترن، یک کلاس برنامه نویسی یا یک کتابخانه و یا تابعی در برنامه که ما معمولا به کدهایمان اضافه میکنیم نیست.دیزاین پترن یه قالب است که باید در شرایطی درست از آن استفاده کنیم. همچنین مستقل از زبان برنامه نویسی می باشد. یک دیزاین پترن خوب باید قابلیت پیاده سازی روی اکثر زبان های برنامه نویسی (نسبت به قابلیت های آن زبان) را داشته باشد. به این نکته مهم توجه داشته باشید که دیزاین پترن مثل چاقوی دولبه هست. اگه در جای نادرست استفاده بشود می تواند فاجعه آمیز باشد و مشکلات زیادی را برای پروژه و هندل کردن آن ایجاد کند ولی اگر در جای درستی استفاده شود می تواند “فرشته ی نجات” برنامه نویسان و توسعه دهندگان باشد!

یک مثال مفهومی می زنیم

 فرض کنید بخواهیم ۱۰۰۰ تا عدد یکسان رو جمع کنیم. جمع کردن ۱۰۰۰ تا عدد زمان بر خواهد بود. بنابراین ما از مفهوم ضرب استفاده می کنیم که در ظاهر قوانین متفاوتی هم دارد ولی در ذات خودش همون جمع هست. استفاده از ضرب برای جمع کردن عددهای یکسان یک الگوی طراحی حساب می شود. ضرب به خودی خود معنی نداره و قابل لمس نیست، بلکه ضرب دو یا چند عدد در هم معنی داره. Design Pattern هم به خودی خود معنی نداره و صرفا یک رویکرد هست.

 برای اینکه رویکرد بودن مشخص بشود یک مثال دیگر هم می زنیم

فرض کنیم می خواهیم یک تعداد عدد ۲ و ۵ رو که بصورت در هم ریخته هستند با هم جمع کنیم. یک راه این است که از ابتدا اعداد را با هم جمع کنیم. راه بهتر این است که ۵ ها را جدا کنیم و با هم جمع کنیم و ۲ ها را هم جدا کنیم و به صورت ضرب ، حاصل را بدست بیاوریم و سپس این دو عدد را با هم جمع کنیم.

این رویکرد که شامل جدا کردن اعداد مشابه و ضرب شان در هم ، را می گوییم دیزاین پترن یا الگوی طراحی.

دیزاین پترن ها سه نوع اصلی و یک نوع پیشرفته دارند

ساختاری (structural): این دسته از پترن‌ها این امکان رو به ما میدن که به شکل بهینه‌تری بین ساختارها، متدها، کلاس‌ها و اساسا هر موجودیتی که در زبانمون داریم ارتباط برقرار کنیم.
تکوینی یا ایجادی (creational) : این الگو‌ها همونطوری که از اسمشون هم مشخصه راه‌حل‌هایی رو در ایجاد اقلام مختلف مثل متدها، نمونه‌ها و… برای ما تعریف می‌کنن.
رفتاری (behavioral): الگوهای رفتاری هم به رفتار Entityهامون (موجودیت‌ها شامل کلاس، متد، نمونه، اینترفیس و…) نسبت به مسائل مختلف میپردازن. مسئله میتونه تغییر یک entity دیگه باشه یا میتونه تغییر state داخل خود entity باشه.
الگوهای همزمانی (Concurrency patterns): الگوهایی که به همزمانی رویدادها در خلال اجرای برنامه می‌پردازن. این الگوها از نظر من یک مرحله پیشرفته‌تر از الگو‌های قبلی هستن.

الگوهای ساختاری به طور کلی با ارتباط بین موجودیت ها سرو کار دارد و باعث می شود آنها با هم بهتر کار کنند.

الگوهای ایجادی ، ساز و کار نمونه سازی ای ارائه می دهد که ایجاد اشیا (اشیا برنامه نویسی شیء گرا) را متناسب با موقعیت آن، ساده تر می کند

الگوهای رفتاری در ارتباط بین موجودیت ها استفاده می شود و این ارتباط را ساده تر و انعطاف پذیر تر می کند.

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

مثال

فرض کنیم میخواهیم دو کلاس رو که در شرایط مختلف کارهای مختلف انجام میدن رو با هم مرج کنیم. این کلاس ها به شدت در جاهای مختلف برنامه استفاده شدن. خب معلومه که خیلی سخته که این دو کلاس رو حذف کنیم و یک کلاس به جاش بنویسیم و همه جای برنامه جاهایی که از این کلاس ها استفاده شده رو تغییر بدیم. بعد لازمه همه بخش های سیستم رو دوباره تست کنیم و تازه ممکنه کامپوننت های دیگه این هم با این کلاس ها کار میکردند که براشون مشکل ایجاد میشه. در نهایت کلی هم باگ ایجاد میشه. به جای این کار میتونیم از دو الگوی استراتژی و آداپتر استفاده کنیم که به راحتی این مسئله رو حل میکنه

 

طراحی اپلیکیشن ios | طراحی نرم افزار ios | طراحی vod | طراحی اپلیکیشن آموزش مجازی | طراحی اپلیکیشن اپل | طراحی اپلیکیشن آیفون | طراحی اپلیکیشن آیپد |

کنترل سرویس مدرسه | طرحی اپلیکیشن دیوار | طراحی اپلیکیشن واقعیت افزوده | طراحی اپلیکیشن شیپور | طراحی شبکه اجتماعی | طراحی پیام رسان | طراحی اپلیکیشن خدماتی | طراحی اپلیکیشن بانک شهر | طراحی موبایل اپلیکیشن | طراحی گرافیکی وب | مکان یاب سرویس مدرسه | کمسیون ماده 18 آموزش پرورش |

سامانه رهگیری سرویس مدارس | طراحی اپلیکیشن رستوران | طراحی اپلیکیشن گردشگری | بلاک چین |

طراحی وب سایت | طراحی اپلیکیشن اندروید | طراحی اپلیکیشن موبایل | طراحی اپلیکیشن تلفن همراه | طراحی نرم افزار الو پیک | طراحی اپلیکیشن مذهبی | طراحی اپلیکیشن اسنپ | طراحی نرم افزار تجاری | طراحی نرم افزار فروشگاهی | طراحی اپلیکیشن اسنپ | طراحی اپلیکیشن ریحون | طراحی اپلیکیشن ردیاب | طراحی سایت | طراحی اپلیکیشن آیفون | طراحی وب | سیستم مدیریت محتوای پاراکس | پاراکس | طراحی نرم افزار اول مارکت | طراحی اپلیکیشن کافه بازار | نرم افزار گوگل پلی | متریال دیزاین | تولید بازی | طراحی گیم اپلیکیشن | طراحی بازی اندروید | گیم سنتر | گیم استور | اینترنت اشیا | اسمارت سیتی | بهینه سازی سایت | واقعیت افزوده | اینترنت چیزها | طراحی اپلیکیشن فروشگاهی

  • logo-samandehi
  • logo-nezam-senfi
  • samane-tadarokat-electronic
  • logo-bakutel
  • انجمن صنفی کارفرمایی فروشگاه های اینترنتی شهر تهران
  • شورای عالی انفورماتیک کشور
  • اتحادیه صنف فناوران رایانه تهران
  • etehadieMajazi