آموزش الگوهای طراحی

آنچه در این صفحه می خوانید:

معرفی الگوهای طراحی (Design Patterns)

الگوی طراحی، شکل قابل استفاده مجدد از راه حل برای مشکل طراحی است. این ایده توسط معمار کریستوفر الکساندر ارائه شده است و برای رشته های مختلف دیگر، به ویژه مهندسی نرم افزار تطبیق یافته است. در سال 1994، چهار نویسنده به نام های Erich Gamma، Richard Helm، Ralph Johnson و John Vlissides کتابی با عنوان "الگوهای طراحی: عناصر دوباره قابل استفاده نرم‌افزار شیءگرا" (Design Patterns - Elements of Reusable Object-Oriented Software) منتشر کردند که به تفسیر مفهوم الگوهای طراحی در توسعه نرم افزار می پرداخت. این نویسندگان در مجموع به عنوان (Gang of Four (GOF شناخته می شوند. با توجه به این نویسندگان، الگوهای طراحی عمدتا بر اساس اصول طراحی شیء گرا هستند. الگوهای طراحی بهترین شیوه هایی را نشان می دهد که توسعه دهندگان نرم افزار شی گرا از آن ها استفاده می کنند. الگوهای طراحی راه حل مشکلات عمومی است که توسعه دهندگان نرم افزار در طول توسعه نرم افزار با آن روبرو می شوند. این راه حل ها با آزمایش و خطا توسط توسعه دهندگان نرم افزاری متعدد طی مدت زمان قابل توجهی به دست می آید.

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

  • الگوهای خلاقیت:الگوهای طراحی خلاقیت روش هایی را برای ایجاد آبجکت ها با استفاده از روش هایی که برای شرایط مختلف مناسب است توصیف می کنند.
  • الگوهای ساختاری: الگوهای طراحی ساختاری، روابط بین اشیا را تعریف می کنند.
  • الگوهای رفتاری: الگوهای طراحی رفتاری، رفتار آبجکت ها را، مانند نحوه ارتباط آن ها با یکدیگر، توصیف می کنند. هر کدام از این سه دسته شامل چندین الگو طراحی دیگر نیز می شوند که برنامه نویسان می توانند از آن ها استفاده کنند. در حالیکه الگوهای طراحی، قالب های کارآمدی را در اختیار توسعه دهندگان نرم افزار قرار داده است، گاهی اوقات به دلیل غیر ضروری بودن یا به اندازه کافی مناسب برنامه های خاصی نبودن، مورد انتقاد قرار می گیرند.

بنابراین، در حالی که الگوهای طراحی ابزارهای مفید برای برنامه نویسی هستند، لازم نیست دقیقا به دنبال ایجاد برنامه نرم افزاری که به خوبی طراحی شده باشیم.

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

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

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

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

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

به عنوان مثال، در کارهای کریستوفر الکساندر، ایستگاه های اتوبوس و اتاق انتظار در مرکز جراحی، هر دو در الگویی "مکانی برای انتظار" قرار دارند.

انواع الگوهای طراحی (Design Patterns)

الگوهای رفتاری

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

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

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

الگوهای خلاقیت

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

الگوهای خلاقیت از ایجاد اشیا در سیستم پشتیبانی می کند. الگوهای خلاقیت اجازه می دهد اشیا در سیستم ایجاد شوند بدون اینکه نوع کلاس خاص را در کد مشخص کنند، بنابراین شما نیازی به نوشتن کد بزرگ و پیچیده برای فوری شیء ندارید. این کار را با داشتن زیر کلاس کلاس ایجاد اشیا انجام می دهد. با این وجود، این می تواند نوع یا تعداد اشیایی را که می توانند در سیستم ایجاد شوند محدود کند.

الگوهای ساختاری

  • الگوهای ساختاری سازه های بزرگتر از قسمت های جداگانه، به طور کلی از طبقات مختلف را تشکیل می دهند.
  • الگوهای ساختاری بسته به نوع ساختاری برای چه منظور ایجاد می شود.

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

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

کاربرد الگوهای طراحی (Design Patterns)

الگوهای طراحی دارای دو کاربرد اصلی در توسعه نرم افزار است.

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

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

بهترین روش ها

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

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

  • الگوهای طراحی از قبل تعریف شده اند و رویکرد استاندارد از صنعت برای حل مشکل تکرار ارائه می دهند، بنابراین در صورت استفاده صحیح از الگوی طراحی، در وقت صرفه جویی می کنید.
  • استفاده از الگوهای طراحی باعث قابلیت استفاده مجدد می شود که منجر به کد قوی تر و بسیار قابل اطمینان می شود. این امر به کاهش هزینه های کل مالکیت (TCO) محصول نرم افزار کمک می کند.
  • از آنجا که الگوهای طراحی از قبل تعریف شده اند، درک و اشکال زدایی کد ما را آسان می کند. این امر منجر به توسعه سریعتر می شود و اعضای جدید تیم به راحتی آن را درک می کنند.

ساختار الگوهای طراحی (Design Patterns)

ساختار الگوهای طراحی

مستندات الگوهای طراحی به شکلی حفظ می شود که بیشتر بر فناوری مورد استفاده متمرکز شود و از چه روش هایی استفاده شود. نمودار زیر ساختار اساسی اسناد الگوی طراحی را توضیح می دهد.

  • نام الگو: این الگو را به روشی کوتاه و مؤثر توصیف می کند.
  • قصد / انگیزه: این توصیف آنچه را که الگوی انجام می دهد.
  • قابلیت استفاده: این لیست موقعیت هایی را که الگوی قابل استفاده است، توصیف می کند.
  • شرکت کنندگان و عواقب آن: شرکت کنندگان شامل کلاس ها و اشیایی هستند که در الگوی طراحی با لیستی از پیامدهایی که با این الگوی وجود دارد شرکت می کنند.

الگوهای طراحی (Design Patterns) در پایتون

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

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

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

  • الگوی MVC
  • الگوی Singleton
  • الگوی کارخانه
  • الگوی سازنده
  • الگوی نمونه اولیه
  • الگوی نما
  • الگوی فرمان
  • الگوی آداپتور
  • الگوی نمونه اولیه
  • الگوی دکوراتور
  • الگوی پروکسی
  • الگوی زنجیره ای از مسئولیت پذیری
  • الگوی ناظر
  • الگوی دولت
  • الگوی استراتژی
  • الگوی پرواز
  • الگوی شی گرا

چه چیزی الگوی طراحی در پایتون را تشکیل می دهد؟

پایتون در ایجاد الگوی طراحی با استفاده از پارامترهای زیر کمک می کند:

  • نام الگوی
  • قصد
  • نام مستعار
  • انگیزه
  • مسئله
  • راه حل
  • ساختار
  • شركت كنندگان
  • محدودیت ها
  • کد نمونه

الگوهای طراحی (Design Patterns) در جاوا

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

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

  • الگوی طراحی Singleton
  • الگوی طراحی کارخانه
  • الگوی طراحی دکوراتور
  • الگوی طراحی کامپوزیت
  • الگوی طراحی آداپتور
  • الگوی طراحی نمونه اولیه
  • الگوی طراحی نما
  • الگوی طراحی پروکسی
  • الگوی طراحی Iterator

الگوهای طراحی (Design Patterns) در سی شارپ

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

فرم سوم، NET. بهینه سازی شده، الگوهای طراحی را نشان می دهد که کاملاً از ویژگی های داخلی NET 4.5 داخلی استفاده می کند، مانند، عمومی، ویژگی ها، نمایندگان، بازتاب و موارد دیگر. این موارد و موارد دیگر در فریمورک الگوی طراحی NET 4.5. موجود است.

الگوهای طراحی (Design Patterns) در جاوااسکریپت

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

برخی از الگوهای طراحی اصلی جاوااسکریپت عبارتند از:

  • الگوی سازنده
  • الگوی نمونه اولیه
  • الگوی ماژول
  • الگوی Singleton
  • الگوی کارخانه
  • الگوی ناظر

الگوهای طراحی (Design Patterns) در پی اچ پی

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

  • الگوهای خلاقیت: از آن ها برای ساخت اشیا به گونه ای استفاده می شود که بتوان از سیستم اجرای آن ها جدا شد
  • الگوهای ساختاری: از آن ها برای شکل دادن ساختارهای بزرگ بین اشیا متفاوت استفاده می شود.
  • الگوهای رفتاری: از آن ها برای مدیریت الگوریتم ها، روابط و مسئولیت های بین اشیا استفاده می شود.
نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود