الگوی طراحی

الگوهای طراحی  الگوها و مستنداتی از روش‌های حل برای مشکلات رایج در برنامه‌نویسی شیءگرا هستند. این الگوها ابتدا توسط کریستوف الکساندر ارائه شد و سپس از سوی گروهی موسوم به دسته چهار  یا به اختصار GOF مورد طبقه‌بندی قرار گرفت و تحت عنوان کتابی به نام الگوهای طراحی در سال ۱۹۹۴منتشر شد.دسته چهار، متن آموزشی توسعه برای افراد حاضر در پروژه‌های و الگوها در توسعهٔ نرم‌افزار

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

 تاریخچه 
در طراحی نرم‌افزارهای مختلف مسایلی دایماً بروز می‌یابند که در پروژه‌های قبلی، که حتی دارای قلمرو کاربردی  مختلفی هستند، نیز وجود دارند. راه حل موجود برای این روش‌های غالباً یکسان است و یافتن طراحی مناسب برای این موارد تکراری وقت‌گیر و هزینه‌بر است. از این رو می‌توان راه‌حل‌هایی را ارائه نمود که مسایل را ساده نماید. از طرفی روح برنامه‌نویسی شیءگرا بر مبنای قابلیت باز-استفادگی  و جز-محوری  است، موجب ایجاد برنامه‌هایی قابل استفاده در آینده خواهد شد.
اریک گاما ،ریچارد هلم، رالف جانسون، جام ولیسایدز که بعدها به دستهٔ۴ معروف شدند در سال ۱۹۹۴ کتاب الگوهای طراحی را به همراه مقدمه‌ای از سوی گریدی بوش به رشتهٔ تحریر درآوردند. این کتاب به دسته‌بندی ۲۳ الگوهای طراحی می‌پرداخت که تا آن زمان ابداع شده‌بودند. گریدی بوش در مقدمهٔ کتاب الگوهای طراحی از الگوهای طراحی به عنوان راه حلی برای ایجاد سیستم‌های پیچیده نام می‌برد و از آن به عنوان زبانی نام می‌برد که می‌تواند بر روی دامنه‌های مختلفی مورد استفاده قرار گیرند.

گاما و همکارانش از ارایهٔ روش تصویری برای هر الگو خودداری نمودند. به جای آن از روش توصیف نوشتاری آبوت استفاده نمودند. هر الگو دارای یک قالب است که عبارتند از:
 نام و طبقه‌بندی: نام الگو و توصیفی کوتاه برای آن را شامل می‌شود.
 قصد: متنی کوتاه در پاسخ به این پرسش که: این الگو چکاری را انجام می‌دهد؟ هدف و تفکر پشت این کار چیست؟ و این الگو چه مسالی را حل می‌نماید؟
 نام دیگر: در صورتی که نام شناخته‌شدهٔ دیگری برای آن وجود دارد ذکر گردد.
 انگیزه: سناریویی که در آن از الگوی طراحی استفاده شده‌باشد و اینکه چگونه از کلاس و شی برای حل مشکل استفاده شده‌است.
 قابلیت کاربردی: توصیفگر شرایط است که این الگو در آن قابل پیاده‌سازی است.
 ساختار: یک نمایش گرافیکی است که براساس تکنیک مدلسازی شیء نمایش داده می‌شود (که امروزه از زبان مدل‌سازی یکپارچه برای این کار استفاده می‌شود)
 شرکت‌کنندگان: کلاس یا اشیا شرکت‌کننده در الگوی طراحی و بیان مسئولیت‌هایشان.
 همکاری: چگونگی همکاری شرکت‌کنندگان در الگو
 پیاده‌سازی: نکات پیاده‌سازی را بیان می‌نماید.
 کد نمونه: مثالی به زبان سی++ یا اسمال‌تاک (امروزه زبان جاوا جایگزین شده‌است)
 مثال‌های شناخته‌شده: مثال‌هایی از کاربرد در سیستم‌های واقعی
 الگوهای مرتبط: چه الگوهایی شبیه این الگو هستند؟ و تفاوت‌های اساسی بین آن‌های چیست؟

 دسته‌بندی الگوهای طراحی 
این ۲۳ الگوی طراحی، در ۳ گروه زیر دسته‌بندی می‌گردند:
 الگوهای ایجادی 
 الگوهای ساختاری 
 الگوهای رفتاری

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

 گروه الگوهای Structural patterns 
در این گروه الگوهای طراحی زیر وجود دارند:

 Adapter

 Bridge

 Composite

 Decorator

 Facade

 Flyweight

 گروه الگوهای Behavioral patterns 
در این گروه الگوهای طراحی زیر وجود دارند:

 Chain of responsibility

 Command

 Interpreter

 Iterator

 Mediator

 Memento

 Observer

 State

 Strategy

 Template method

 Visitor

 پانویس 
 Singleton
 Method Factory
 Abstract Factory
 Builder
 Prototype

 منابع 

رده:الگوهای طراحی نرم‌افزار
رده:کتاب‌های ۱۹۹۴ (میلادی)
رده:کتاب‌های مهندسی نرم‌افزار
رده:طراحی معماری