اخبار، مطالب و رویدادهای مرتبط با توسعه نرم افزار رادکام

الگوهای طراحی نرم افزار

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

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

الگوهای طراحی چه هستند؟

در ادامه به این که چه مواردی الگوهای طراحی هستند و چه مواردی الگوی طراحی نیستند اشاره خواهد شد:

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

انواع الگوهای طراحی

به صورت کلی الگوهای طراحی به سه دسته تقسیم بندی می شوند:

  • Creational: الگوهای طراحی خلاقانه، که برای ساخت ساخت کلاس ها و اشیا به کار برده می شوند. این الگوها شامل الگوهای زیر می باشند:
    1. Abstract Factory: برای ساخت خانواده هایی از اشیای مرتبط به یکدیگر در زمان اجرا به کار برده می شود.
    2. Builder: ایجاد اشیای پیچیده با اجزای تشکیل دهنده به صورتی که با همان فرآیند ساخت می توان نمایش های گوناگون ایجاد کرد.
    3. Factory Method: برای ایجاد شی Interface را تعیین می کند اما کلاسهای فرعی تصمیم می گیرند چه کلاسی معرفی شود.
    4. Prototype: برای ایجاد شی جدیدی که خواص شی اصلی را داشته باشد به کار می رود.
    5. Singleton: این که فقط یک نمونه از یک کلاس وجود داشته باشد را تضمین می کند و یک نمونه کلی برای دسترسی به آن ایجاد می کند.
  • Structural: الگوهای طراحی ساختاری، که به ترکیب کلاس ها و اشیا و آیتم ها پرداخته و در نهایت عملکرد برای عملکرد جدید استفاده می شوند. که شامل الگوهای زیر است:
    1. Adapter: برای این که کلاس هایی که با هم مرتبط نیستند بتوانند با هم کار کنند Interface ایجاد می کند.
    2. Bridge: برای جدا کردن قسمت پیاده سازی از قسمت انتزاعی در یک کلاس به کار می رود و باعث می شود دو طرف مستقل از یکدیگر و به راحتی کار کنند.
    3. Composite: برای ایجاد اشیا در ساختارهای درختی و بازگشتی به کار برده می شود. در این صورت با اشیا منفرد و ترکیبی به صورت یکسان برخورد می شود.
    4. Decorator: به صورت پویا مسئولیت های اضافه را به شی ضمیمه می کند. جایگزینی منعطف برای طبقه بندی فرعی برای توسعه عملکرد ایجاد می کنند.
    5. Facade: برای مجموعه میانجی های موجود در کلاس فرعی Interface یکنواخت ایجاد می کند و در سطح بالاتر استفاده از سیستم فرعی را ساده تر می کند.
    6. Flyweight: زمانی که تعداد اشیا زیاد و مدیریت آن ها سخت باشد استفاده می شود.
    7. Proxy: برای شی یک جانشین فراهم می کند تا دسترسی به آن را کنترل کند.
  • Behavioral: الگوهای طراحی رفتاری، که به ارتباط بین کلاس ها و اشیا پرداخته و جزو مهمترین و خاص ترین الگوها هستند و شامل الگوهای زیر هستند:
    1. Chain of Responsibility: به صورت یک زنجیره از اشیا به درخواست کاربر پاسخ می دهد.
    2. Command: این که یک عملیات به چه صورتی انجام شود را تعیین نموده و آن ها را مدیریت می کند.
    3. Interpreter: برای تعریف گرامرهای زبان و تفسیر جملات استفاده می شود و فقط در کامپایلرها به کار می رود.
    4. Iterator: برای دسترسی به عناصر یک شی به هم پیوسته به طور متوالی بدون این که نمایش دچار مشکل شود، شیوه ای ایجاد می کند.
    5. Mediator: یک شی که چگونگی تعامل با مجموعه اشیا را در محفظه قرار می دهد ایجاد می کند. همچنین باعث می شود که اشیا کمتر به صورت دو به دو با هم در ارتباط بوده و Coupling کمتر شود.
    6. Memento: حالت کنونی شی را برای این که بعدا بتوان شی را به آن حالت بازگرداند، ذخیره می کند.
    7. Observer: بین اشیا یک وابستگی یک به چند ایجاد می کند. طوری که در صورتی که شی تغییر کند کلیه موارد وابسته به آن نیز تغییر نموده و به صورت خودکار آپدیت شوند.
    8. State: به شی اجازه می دهد در صورتی که حالت درونی آن تغییر کند، رفتار خود را تغییر دهد به صورتی که شی کلاس خود را تغییر داده است.
    9. Strategy: یک خانواده از الگوریتم ها تعریف کرده و هر کدام را در پوششی قرار می دهد و آن ها را قابل تعویض می کند و اجازه می دهد الگوریتم به صورت مستقل از کاربرانی که از آن استفاده می کنند و متفاوت باشد.
    10. Template Method: اسکلت بندی الگوریتم در یک عملیات را تعریف می کند و پیاده سازی برخی مراحل را به کلاس های فرعی واگذار می کند. به کلاس های فرعی اجازه می دهد که برخی مراحل یک الگوریتم را بدون تغییر ساختار الگوریتم دوباره تعریف کنند.
    11. Visitor: امکان عملیات جدید بدون تغییر کلاس های عناصری که در آن کار می کند را فراهم می کند.
پست های مرتبط

محسن
۱۳۹۹/۰۹/۱۸ Germany
1
4

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


نام را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید