الگوی طراحی
الگوهای طراحی (به انگلیسی: Design Patterns) الگوها و مستنداتی از روشهای حل برای مشکلات رایج در برنامهنویسی شیءگرا هستند. این الگوها ابتدا توسط کریستوف الکساندر ارائه شد و سپس از سوی گروهی موسوم به دسته چهار (به انگلیسی: Gang of Four) یا به اختصار GOF مورد طبقهبندی قرار گرفت و تحت عنوان کتابی به نام الگوهای طراحی در سال ۱۹۹۴منتشر شد.[1]
کریستوف الکساندر الگوی طراحی را راه حلی برای مسایلی میداند که دایماً در محیط اطراف رخ میدهد، از این رو میتوان بدون دوباره کاری در آینده مسایل را با سرعت بالاتری حل نمود.[2]
تاریخچه
در طراحی نرمافزارهای مختلف مسایلی دایماً بروز مییابند که در پروژههای قبلی، که حتی دارای قلمرو کاربردی (به انگلیسی: Application Domain) مختلفی هستند، نیز وجود دارند. راه حل موجود برای این روشهای غالباً یکسان است و یافتن طراحی مناسب برای این موارد تکراری وقتگیر و هزینهبر است. از این رو میتوان راهحلهایی را ارائه نمود که مسایل را ساده نماید. از طرفی روح برنامهنویسی شیءگرا بر مبنای قابلیت باز-استفادگی (به انگلیسی: ReUse) و جز-محوری (به انگلیسی: Component-Based) است، موجب ایجاد برنامههایی قابل استفاده در آینده خواهد شد. اریک گاما ،ریچارد هلم، رالف جانسون، جام ولیسایدز که بعدها به دستهٔ۴ معروف شدند در سال ۱۹۹۴ کتاب الگوهای طراحی را به همراه مقدمهای از سوی گریدی بوش به رشتهٔ تحریر درآوردند. این کتاب به دستهبندی ۲۳ الگوهای طراحی میپرداخت که تا آن زمان ابداع شدهبودند. گریدی بوش در مقدمهٔ کتاب الگوهای طراحی از الگوهای طراحی به عنوان راه حلی برای ایجاد سیستمهای پیچیده نام میبرد و از آن به عنوان زبانی نام میبرد که میتواند بر روی دامنههای مختلفی مورد استفاده قرار گیرند.[3]
گاما و همکارانش از ارایهٔ روش تصویری برای هر الگو خودداری نمودند. به جای آن از روش توصیف نوشتاری آبوت استفاده نمودند. هر الگو دارای یک قالب است که عبارتند از:
- نام و طبقهبندی: نام الگو و توصیفی کوتاه برای آن را شامل میشود.
- قصد: متنی کوتاه در پاسخ به این پرسش که: این الگو چکاری را انجام میدهد؟ هدف و تفکر پشت این کار چیست؟ و این الگو چه مسالی را حل مینماید؟
- نام دیگر: در صورتی که نام شناختهشدهٔ دیگری برای آن وجود دارد ذکر گردد.
- انگیزه: سناریویی که در آن از الگوی طراحی استفاده شدهباشد و اینکه چگونه از کلاس و شی برای حل مشکل استفاده شدهاست.
- قابلیت کاربردی: توصیفگر شرایط است که این الگو در آن قابل پیادهسازی است.
- ساختار: یک نمایش گرافیکی است که براساس تکنیک مدلسازی شیء نمایش داده میشود (که امروزه از زبان مدلسازی یکپارچه برای این کار استفاده میشود)
- شرکتکنندگان: کلاس یا اشیا شرکتکننده در الگوی طراحی و بیان مسئولیتهایشان.
- همکاری: چگونگی همکاری شرکتکنندگان در الگو
- پیادهسازی: نکات پیادهسازی را بیان مینماید.
- کد نمونه: مثالی به زبان سی++ یا اسمالتاک (امروزه زبان جاوا جایگزین شدهاست)
- مثالهای شناختهشده: مثالهایی از کاربرد در سیستمهای واقعی
- الگوهای مرتبط: چه الگوهایی شبیه این الگو هستند؟ و تفاوتهای اساسی بین آنهای چیست؟[4]
دستهبندی الگوهای طراحی
این ۲۳ الگوی طراحی، در ۳ گروه زیر دستهبندی میگردند:
گروه الگوهای ایجادی
- در این گروه الگوهای طراحی زیر وجود دارند:
نام الگو | شرح الگو |
---|---|
الگوی یگانه ∗ | این الگو جهت پیادهسازی کلاسی است که فقط و فقط به یک نمونه آن از کلاس در سرتاسر یک سیستم نیاز میباشد. |
الگوی کارخانه متد ∗ | این الگو، کلاسی است که نمونههای از کلاسهای دیگر را با توجه به پارامترهای که برای آن ارسال میشود، ایجاد مینماید. |
الگوی کارخانه انتزاعی ∗ | این الگو راهی جهت کپسولهسازی یک گروه از اشیا که دارای خواص مشترک هستند، میباشد. |
الگوی سازنده ∗ | هدف این الگو اینست اشیایی که مراحل ساخت آنها با مراحل پیادهسازی آنها مختلف است بتوانند نمایی متفاوت از این اشیا را بسازند. |
الگوی نمونه اولیه∗ | در این الگو ابتدا نمونه اولیه اشیا ایجاد میگردد و سپس سایر مشخصات مورد نیاز، به آن اضافه میگردد. |
گروه الگوهای Structural patterns
- در این گروه الگوهای طراحی زیر وجود دارند:
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
گروه الگوهای Behavioral patterns
- در این گروه الگوهای طراحی زیر وجود دارند:
- Chain of responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template method
- Visitor
منابع
- دسته چهار، متن آموزشی توسعه برای افراد حاضر در پروژههای و الگوها در توسعهٔ نرمافزار
- گاما، اریک (۱۹۹۴). الگوهای طراحی. ادیسون-وابزلی. ص. ۲. شابک ۰-۲۰۱-۶۳۳۶۱-۲. پارامتر
|first2=
بدون|last2=
در Authors list وارد شدهاست (کمک); پارامتر|تاریخ بازیابی=
نیاز به وارد کردن|پیوند=
دارد (کمک) - گاما، اریک (۱۹۹۴). الگوهای طراحی. ادیسون-وابزلی. ص. ۱. شابک ۰-۲۰۱-۶۳۳۶۱-۲. پارامتر
|first2=
بدون|last2=
در Authors list وارد شدهاست (کمک); پارامتر|تاریخ بازیابی=
نیاز به وارد کردن|پیوند=
دارد (کمک) - گاما، اریک (۱۹۹۴). «فصل اول-معرفی». الگوهای طراحی. ادیسون-وابزلی. شابک ۰-۲۰۱-۶۳۳۶۱-۲. پارامتر
|first2=
بدون|last2=
در Authors list وارد شدهاست (کمک); پارامتر|تاریخ بازیابی=
نیاز به وارد کردن|پیوند=
دارد (کمک)