الگوهای طراحی کدنویسی یا همان Design Patterns، نشان دهندهی راه حلها و تجربیات برنامهنویسان در زبانهای شیگرا(Object Oriented) هستند. به بیان دیگر Design Patterns راهحلهای عمومی برای حل مشکلاتی هستند که برنامهنویسان ممکن است در حین توسعه نرم افزار با آنها روبرو شوند. این راهحلها عموما با آزمون و خطا، توسط تعداد زیادی از برنامهنویسان و طی یک مدت زمان قابل توجهی به دست آمدهاند. در نتیجه آگاه بودن از آنها به یک برنامه نویس کمک میکند تا کدنویسی بهتر و بهینهتری داشته باشد.
Gang of Four چیست؟
در سال ۱۹۹۴، چهار نویسنده به نامهای Erich Gamma، Richard Helm، Ralph Johnson و John Vlissides کتابی را تحت عنوان “Design Patterns – Elements of Reusable Object-Oriented Software” منتشر کردند که آغازگر معرفی مفاهیم الگوهای طراحی در توسعه نرمافزار بود.
این چهار نویسنده، مجموعا تحت عنوان Gang of Four شناخته شدند. بر اساس گفته این چها نویسنده الگوهای طراحی بر پایه دو اصل زیر بناگذاری شده اند:
- Program to an interface not an implementation: برنامه خود را نسبت به یک Interface بنویسید؛ نه یک پیادهسازی(implementation)
- Favor object composition over inheritance: ترکیببندی اشیا بر ارثبری آنها از هم ارجعیت دارد.
شاید درک دو اصل بالا کمی سخت باشد، اما با پیادهسازی الگوهای طراحی به طور کامل معنای آنها را درک خواهیم کرد.
Design Pattern ها چه استفادهای دارند؟
الگوهای طراحی دو مورد عمدهی استفاده دارند که در ادامه به برری هر کدام میپردازیم.
- یک پلتفرم مشترک برای توسعه دهندهها: الگوهای طراحی یک اصطلاح استاندارد و خاص برای یک سناریو خاص ارائه می دهند. به عنوان مثال، الگوی طراحی Singleton نشان دهنده استفاده از یک شی در تمام برنامه است. یعنی کلاسی که تنها بتوان یک شی از آن ایجاد کرد. همه ی توسعه دهندگان آشنا با این الگوی طراحی، با مشاهده کد می توانند به یکدیگر بگویند که برنامه الگوی Singleton را دنبال می کند.
- بهترین روش حل مسئله: الگوهای طراحی طی مدت زمان طولانی تکامل یافته و بهترین راه حل را برای مشکلات خاصی که در طول توسعه نرم افزار بوجود آمده اند، ارائه می دهند. یادگیری این الگوها کمک می کند تا توسعه دهندگانِ بی تجربه، طراحی نرم افزار را آسان و سریع فرا بگیرند.
انواع Design Patterns
بر اساس مطالب کتابی که در مقدمه معرفی کردیم، تعداد ۲۳ الگوی طراحی وجود دارد که به سه دسته تقسیم بندی میشوند.
Creational: آفرینشی؛ یعنی الگوهایی که مربوط به ایجاد Object ها هستند. تمرکز این الگوها بر روی مخفی سازی logic ایجاد اشیا، به جای استفاده از عملگر new برای ساخت اشیا جدید استوار است. این الگوها انعطاف پذیری بیشتری به برنامه میدهند تا در شرایط مختلف تصمیمگیری شود که چه نوع Object ای باید ایجاد شود.
Structural: ساختاری. این الگوها در مورد ترکیببندی Class و Object هستند. در واقع این الگوها به دنبال استفاده از مفهوم ارث بری برای نوشتن Interface ها و تعریف کردن راه هایی برای ساختن اشیائی هستند که قادر باشند در زمان اجرا ویژگیهای جدیدی به دست آورند.
Behavioral: رفتاری؛ این الگوهای طراحی به طور خاص بر روی ارتباط بین اشیاء تمرکز دارند.