معرفی  Design Pattern

معرفی Design Pattern

تاریخ : چهارشنبه 15 آذر 1396

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

به طور واضح، Design Patternها کدهای آماده ای نیستند که بتوان مستقیماً از آن ها استفاده کرد. اما یکسری رویکرد یا نظریه برای حل چالش های عادی طراحی ارائه می دهند.

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

دسته بندی الگو ها

در اوایل دهه ۱۹۹۰، افرادی زیادی روی الگوهای طراحی کار می کردند. اما چهار نفر به نام های، گاما، جاکوبسون، هلم و ولسایدز بیشترین تاثیر را در این زمینه با نوشتن کتابی به نام “Design Pattern: Elements of Reusable Object-Oriented Software”، داشتند. این چهار نویسنده به Gang of Four مشهور شدند. آنها در این کتاب ایده استفاده از الگوها را در طراحی نرم افزار به کار بردند و یک فرمت استاندارد را برای مستندسازی الگوها ایجاد کردند. الگوهای طراحی بیان شده در سه دسته تقسیم بندی شده اند و در مجموع 23 الگو هستند :

  1. الگوهای بوجود آورنده(Creational Pattern):

    همه الگو های که در این دسته قرار می کیرند در ارتباط با روش های ایجاد اشیاء هستند.آنها مسئولیت نمونه سازی از کلاس­ها را به یک نقطه منتقل می­کنند تا قواعد SRP و SoC رعایت گردند. الگوهای این گروه عبارتند از:

    • Factory : یک کلاس، وظیفه ایجاد یک شیء معتبر را به کلاسی دیگر واگذار می کند.
    • Abstract Factory : واسط هایی را ایجاد می­کند برای ساخت خانواده ای از  اشیای مرتبط.
    • Builder : امکان ساخت ویرایش های مختلف از یک شیء را با جدا سازی سازنده آن شیء فراهم می کند.
    • Prototype : امکان کپی اشیاء را به ایجاد یک نمونه جدید فراهم می کند.
    • Singleton : به کلاس این امکان را می دهد که فقط یک نمونه از خود ایجاد کرده و فقط یک نقطه واحد برای دسترسی به آن نمونه باشد.

  2. الگوهای ساختاری(Structural Patten):

    این نوع الگوها شرح می دهند چگونه اشیاء و کلاس ها می توانند در ساختارهای بزرگتر باهم ترکیب شوند. الگوهای این گروه عبارتند از:

    • Adapter : به کلاس­هایی از واسط های ناسازگاز اجازه کار با یکدیگر را می دهد.
    • Bridge : یک انتزاع را از پیاده سازی آن جدا می کند و اجازه می دهد که آنها مستقل از یکدیگر تغییر کند.
    • Composite : اجازه می دهد که یک گروه از اشیاء که به صورت سلسله مراتبی نمایش داده  می­شوند، درست مانند یک نمونه از یک شیء مورد استفاده قرار گیرد.
    • Decorator : به صورت پویا می­تواند یک کلاس را پوشش داده و رفتارهای آن را توسعه دهد.
    • Facade : یک واسط ساده ایجاد می­کند برای کنترل دسترسی به تعدادی از واسط­ها و زیر سیستم­های پیچیده.
    • Flyweight : روشی را برای اشتراک داده­ها بین تعداد زیادی از کلاس­های کوچک فراهم می­نماید.
    • Proxy : یک نگهداره برای یک کلاس پیچیده که نمونه گیری از آنها هزینه­ بر است را فراهم می­نماید.
  3. الگوهای رفتاری(Behavioral Pattern):

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

    • Chain of Responsibility : اجازه می­دهد که دستورات با یکدیگر زنجیر شوند تا یک درخواست را انجام دهند.
    • Command : یک متد را در قالب یک شیء بسته بندی می کند و اجرای دستور  را از صادر کننده آن جدا می­سازد.
    • Interpreter : نحوه ارزیابی جملات در یک زبان را مشخص می­کند.
    • Iterator : نحوه پیمایش یک مجموعه را به صورت فرموله شده تعیین می­کند.
    • Mediator : شیء ایی را تعریف می­کند که امکان برقراری ارتباط بین دو شیء دیگر را فراهم می­نماید بدون آنکه آنها از یکدیگر مطلع باشند.
    • Memento : امکان برگشت دادن وضعیت یک شیء به حالت قبلی­اش را فراهم می­نماید.
    • Observer : روشی را تعریف می­کند که یک یا چند کلاس از تغییرات در یک کلاس مطلع گردند.
    • State : اجازه می­دهد که یک شیء تغییر رفتار خود را به یک شیء دیگری واگذار کند.
    • Strategy : اجازه می­دهد که یک الگوریتم در یک کلاس بسته بندی شود و در زمان اجرا تعویض شود برای تغییر رفتار  یک شیء.
    • Template Method : کلاسی که کنترل جریان یک الگوریتم را تعریف نماید ولی به کلاس های مشتق اجازه می دهد گام های اجرایی آن را پیاده سازی نمایند.
    • Visitor : امکان کارکرد جدید برای یک کلاس را فراهم می نمایند بدون آنکه ساختار آن تغییر کند.

منابع مورد مطالعه جهت جمع آوری این مطلب:
http://megaweb.ir/آموزش/الگوی-طراحی-design-pattern/الگوهای-طراحی
http://agiledevelopment.ir/ebook/design-pattern/introduction-to-design-pattern/gof-design-pattern/
http://www.tahlildadeh.com/ArticleDetails/الگوهای-طراحی-Design-Pattern


نظرات