دیزاین پترن چیست؟ شاید شما نیز تابحال در اصطلاحات تخصصی برنامه نویسی، نام دیزاین پترن (Design Pattern) را شنیده باشید، اما نمی‌دانید که Design Pattern چیست؟ دیزاین پترن‌ها مجموعه‌ای از روش‌ها و الگوهای طراحی هستند که برای حل مشکلات مختلف در حوزه‌های نرم‌افزار مورد استفاده قرار می‌گیرند. زبان برنامه نویسی در دیزاین پترن مهم نیست و با هر زبانی که هستید می‌توانید Design Patternها را پیاده‌سازی کنید. دیزاین پترن‌ها جزء سوالات مصاحبه برنامه نویسی هستند. در این مقاله از آموزش برنامه نویسی، انواع Design Patterns (الگوهای طراحی) در برنامه نویسی می‌پردازیم.

موضوعاتی که در این مقاله آن‌ها را بررسی خواهیم کرد:

  • الگوی طراحی یا دیزاین پترن چیست؟
  • کاربرد دیزاین پترن چیست؟
  • تاریخچه الگوهای طراحی (Design Patterns)
  • مزایای استفاده از دیزاین پترن چیست؟
  • معایب استفاده از دیزاین پترن چیست؟
  • معرفی انواع الگوهای طراحی (Design Patterns)
  • الگوهای طراحی ایجادی (Creational Design Patterns)
  • الگوهای طراحی ساختاری (Structural Design Patterns)
  • الگوهای طراحی رفتاری (Behavioral Design Patterns)
  • جمع‌بندی 23 نوع الگوی طراحی (Design Pattern)
  • معرفی کتاب برای آموزش دیزاین پترن‌ها

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

در پاسخ به دیزاین پترن چیست؟ «دیزاین پترن» به انگلیسی «Design Pattern» به معنی «الگوی طراحی»، یک سری روش‌ها و الگوهایی برای حل مشکلات متداول در برنامه نویسی شیءگرا است. به عبارت ساده‌تر، الگوهای طراحی (ِDesign Patterns) یک راه‌حل عمومی قابل تکرار برای حل مشکلات متداول در زمینه طراحی نرم‌افزار است.

در طول زمان، برنامه نویسان با مشکلات مختلف و مشابه هم در توسعه نرم‌افزار روبرو می‌شدند. این مشکلات مربوط به یک زبان برنامه نویسی خاص نبود و در همه‌ی زبان‌های شیءگرا اتفاق می‌افتاد. برای همین یک سری الگوهای طراحی ابداع شد که مشکلات برنامه نویسی شیءگرا را حل کرد. به این الگوهای طراحی، Design Patterns می‌گویند.

کاربرد دیزاین پترن چیست؟

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

همچنین استفاده از الگوهای طراحی (Design Patterns) باعث استفاده مجدد از نرم‌افزار می‌شود. یک الگو یک بار طراحی می‌شود و بارها استفاده می‌شود. استفاده مجدد از الگوها به طور بالقوه هزینه‌های تولید را کاهش می‌دهد و با به حداقل رساندن زمان طراحی مجدد، باعث صرفه‌جویی در زمان می‌شود. استفاده مجدد باعث اطمینان بیشتر نرم‌افزار و تداوم طراحی کد می‌شود.

تاریخچه الگوهای طراحی (Design Patterns)

الگوهای طراحی (Design Patterns)، اولین بار در سال 1977 با انتشار کتاب «A Pattern Language» توسط معماری به نام کریستوفر الکساندر و چند نفر دیگر معرفی شد. این کتاب در زمینه معماری و طراحی شهری بود که به صورت یک مجموعه از 253 الگوی طراحی است که در آن اصول و رویکردهایی برای ساخت شهرها، ساختمان‌ها و ساخت و سازها ارائه شده بود.

سپس، مفهوم الگوهای طراحی به محیط نرم‌افزار نیز گسترش یافت. گروهی موسوم به «دسته چهار» به انگلیسی «Gang of Four» یا به اختصار «GOF» که اعضای آن رالف جانسون، ریچارد هلم، ریک گاما، جان ولیسیدز بودند، مورد طبقه‌بندی قرار گرفت و تحت عنوان کتابی به نام «الگوهای طراحی: عناصر دوباره قابل استفاده نرم‌افزار شیءگرا» (Design Patterns: Elements of Reusable Object-Oriented Software) در سال 1994 منتشر شد.

دو فصل اول این کتاب مربوط به قابلیت‌ها و مشکلات برنامه نویسی شیءگرا است و بقیه‌ی فصل‌ها به معرفی 23 الگوی طراحی (Design Pattern) کلاسیک در سه دسته‌بندی کلی الگوهای ایجادی، الگوهای ساختاری و الگوهای رفتاری می‌پردازد. در این کتاب، مثال‌هایی از زبان برنامه نویسی سی پلاس پلاس و اسمال‌تاک وجود دارند.

مزایای استفاده از دیزاین پترن چیست؟

در قسمت‌های قبل دانستیم که دیزاین پترن چیست و چه کاربردی دارد؟ در این قسمت به مزایای استفاده از دیزاین پترن‌ها می‌پردازیم. برخی از مزایای دیزاین پترن‌ها عبارت‌اند از:

  1. استانداردسازی: دیزاین پترن‌ها به طراحان کمک می‌کنند تا الگوهای استاندارد و قابل استفاده را در طراحی و پیاده‌سازی نرم‌افزارها بهره‌برداری کنند. این استانداردها باعث ایجاد یک رویکرد مشترک و قابل فهم در تیم‌های توسعه می‌شوند.
  2. قابلیت استفاده مجدد: دیزاین پترن‌ها باعث ایجاد کد قابل استفاده مجدد می‌شوند. زیرا با استفاده از الگوهای طراحی، قطعات کد قابل استفاده در موارد مشابه در نرم‌افزارهای دیگر ایجاد می‌شوند.
  3. کاهش تکرار و خطا: با استفاده از دیزاین پترن‌ها، تکرار در طراحی و پیاده‌سازی نرم‌افزار کاهش می‌یابد. این کاهش تکرار باعث کاهش احتمال وقوع خطاها و اشتباهات در نرم‌افزار می‌شود.
  4. قابلیت نگهداری و توسعه: با استفاده از دیزاین پترن‌ها، ساختار و منطق نرم‌افزار بهبود می‌یابد و قابلیت نگهداری و توسعه آن بالا می‌رود. این الگوها به طراحان کمک می‌کنند تا تغییرات و بهبودهای بعدی در نرم‌افزار را به راحتی اعمال کنند.
  5. افزایش کیفیت نرم‌افزار: استفاده از دیزاین پترن‌ها باعث بهبود کیفیت و عملکرد نرم‌افزار می‌شود. زیرا این الگوها براساس تجربه‌های آزموده شده در حوزه‌های مختلف به وجود آمده‌اند.
  6. و...

معایب استفاده از دیزاین پترن چیست؟

در ادامه مقاله دیزاین پترن چیست؟ به معایب استفاده از دیزاین پترن‌ها می‌پردازیم. استفاده از دیزاین پترن‌ها در طراحی و توسعه نرم‌افزار مزایای زیادی دارد، اما ممکن است معایب و محدودیت‌هایی نیز داشته باشد. برخی از معایب دیزاین پترن‌ها عبارت‌اند از:

  1. پیچیدگی اضافی: برخی از دیزاین پترن‌ها ممکن است باعث افزایش پیچیدگی کد و ساختار نرم‌افزار شوند. این ممکن است زمان و تلاش بیشتری برای فهم و توسعه کد را مستلزم کند.
  2. انعطاف‌پذیری محدود: استفاده از دیزاین پترن‌ها ممکن است باعث محدودیت در انعطاف‌پذیری و تغییرپذیری نرم‌افزار شود. در برخی موارد، اعمال تغییرات بزرگ به الگوها و پترن‌ها ممکن است مشکلاتی را به همراه داشته باشد.
  3. پیچیدگی در فهم الگوها: برخی از دیزاین پترن‌ها ممکن است برای تیم‌های توسعه که با آنها آشنایی کافی ندارند، پیچیده به نظر برسند. این می‌تواند باعث سربار و مشکلات در فهم و استفاده صحیح از الگوها شود.
  4. بیش‌برنامه‌ریزی: استفاده از دیزاین پترن‌ها ممکن است به تلاش بیش‌برنامه‌ریزی و هزینه‌بر برای انتخاب و پیاده‌سازی صحیح الگوها منجر شود.
  5. افزایش پیچیدگی اجرایی: در برخی موارد، استفاده از دیزاین پترن‌ها ممکن است منجر به افزایش پیچیدگی اجرایی نرم‌افزار شود و در نتیجه، مصرف منابع سیستمی بیشتری را نیاز داشته باشد.
  6. و...

معرفی انواع الگوهای طراحی (Design Patterns)

انواع الگوهای طراحی (Design Patterns)

در قسمت‌های قبلی مقاله دانستیم که دیزاین پترن چیست؟ در این قسمت به معرفی انواع دیزاین پترن‌ها می‌پردازیم. به‌طور کلی، دیزاین پترن‌ها به 3 دسته کلی زیر طبقه‌بندی می‌شوند:

  1. الگوهای طراحی ایجادی (Creational Design Patterns)
  2. الگوهای طراحی ساختاری (Structural Design Patterns)
  3. الگوهای طراحی رفتاری (Behavioral Design Patterns)

این 3 دسته به چندین بخش مختلف تقسیم‌بندی می‌شوند که نهایتا منجر به توسعه‌ی 23 نوع الگوی طراحی (Design Pattern) شده‌اند. در ادامه مقاله به معرفی هر کدام از این دیزاین پترن‌ها پرداخته‌ایم.

الگوهای طراحی ایجادی (Creational Design Patterns)

انواع الگوهای طراحی ایجادی (Creational Design Patterns)

کاربرد دیزاین پترن ایجادی چیست؟ الگوهای طراحی ایجادی (Creational Design Patterns) در برنامه نویسی شیءگرا به منظور ایجاد و ساخت نمونه‌های شیء استفاده می‌شوند. این الگوها به شما امکان می‌دهند روند ایجاد و ساخت شیء را مدیریت کرده و از وابستگی‌ها و جزئیات پیچیده آن فاصله بگیرید.

دیزاین پترن‌های تکوینی یا ایجادی، خود به 6 بخش زیر دسته‌بندی می‌شوند:

  1. Singleton
  2. Factory Method
  3. Prototype
  4. Abstract Factory
  5. Builder
  6. Object Pool

کاربرد دیزاین پترن Singleton چیست؟

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

کاربرد دیزاین پترن Factory Method چیست؟

دیزاین پترن Factory Method یکی از الگوهای طراحی ایجادی است که برای ایجاد یک شیء با استفاده از یک متد انتزاعی کارخانه (Factory Method) استفاده می‌شود. در الگوی روش کارخانه‌ای (Factory Method)، ایجاد یک شیء به یک کلاس انتزاعی واگذار می‌شود و کلاس‌های مشتق شده مسئول ایجاد نمونه‌های خاص از شیء مورد نظر هستند.

کاربرد دیزاین پترن Prototype چیست؟

دیزاین پترن Prototype یکی از الگوهای طراحی ایجادی است که برای ایجاد نمونه‌های جدیدی از یک شیء با استفاده از کپی کردن (cloning) شیء اولیه استفاده می‌شود. به این ترتیب، الگوی نمونه اولیه (Prototype)، از ایجاد نمونه‌ها به صورت مستقیم و از طریق سازنده جدا می‌شود.

کاربرد دیزاین پترن Abstract Factory چیست؟

دیزاین پترن Abstract Factory یکی از الگوهای طراحی ایجادی است که برای ایجاد یک خانواده از اشیاء مرتبط استفاده می‌شود. در الگوی کارخانه انتزاعی (Abstract Factory)، یک فابریک (Factory) انتزاعی تعریف می‌شود که مسئولیت ایجاد اشیاء مرتبط را بر عهده دارد، اما جزئیات ساخت آن‌ها را از نظر برنامه‌نویس مخفی می‌کند.

کاربرد دیزاین پترن Builder چیست؟

دیزاین پترن Builder یکی از الگوهای طراحی ایجادی است که برای ساخت یک شیء پیچیده به صورت مرحله به مرحله و با تنظیم پارامترهای مختلف استفاده می‌شود. با استفاده از الگوی Builder، می‌توانیم یک روش یکنواخت برای ساختن شیء را ارائه دهیم، اما بتوانیم مراحل ساخت را تنظیم کنیم و نتیجه نهایی را دریافت کنیم.

کاربرد دیزاین پترن Object Pool چیست؟

دیزاین پترن Object Pool یکی از الگوهای طراحی ایجادی است که برای بهبود عملکرد سیستم‌ها با هزینه‌ی ساخت یک شیء گران‌قیمت، مجدداً استفاده از شیء‌ها از جمله اشیاء منابع (Resource Objects) استفاده می‌شود. در این الگو، یک مجموعه از شیء‌ها ساخته می‌شود و در اختیار برنامه‌نویسان قرار می‌گیرد تا بتوانند از آن‌ها استفاده کنند و پس از اتمام کار، آن‌ها را به مجموعه برگردانند.

الگوهای طراحی ساختاری (Structural Design Patterns)

انواع الگوهای طراحی ساختاری (Structural Design Patterns)

کاربرد دیزاین پترن ساختاری چیست؟ الگوهای طراحی ساختاری (Structural Design Patterns) در برنامه نویسی شیءگرا به منظور ساختاردهی به عناصر مختلف سیستم و ارتباطات بین آن‌ها استفاده می‌شوند. این الگوها به شما امکان می‌دهند تا روابط میان اشیاء و کلاس‌ها را بهبود بخشیده و ساختار سیستم را قابل توسعه و قابل استفاده مجدد کنید.

دیزاین پترن‌های ساختاری، خود به 7 بخش زیر دسته‌بندی می‌شوند:

  1. Adapter
  2. Decorator
  3. Facade
  4. Bridge
  5. Composite
  6. Flyweight
  7. Proxy

کاربرد دیزاین پترن Adapter چیست؟

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

کاربرد دیزاین پترن Decorator چیست؟

دیزاین پترن Decorator یکی از الگوهای طراحی ساختاری است که امکان اضافه کردن رفتارها یا ویژگی‌های جدید به یک شیء را بدون تغییر در ساختار آن فراهم می‌کند. با استفاده از الگوی دکوراتر، می‌توانیم شیء را به صورت پوششی (Wrapper) در یک شیء دیگر قرار دهیم و عملکرد یا ویژگی‌های جدید را به آن اضافه کنیم.

کاربرد دیزاین پترن Facade چیست؟

دیزاین پترن Facade یکی از الگوهای طراحی ساختاری است که یک رابط ساده و یکپارچه برای دسترسی به یک زیرسیستم پیچیده‌تر را فراهم می‌کند. الگوی فساد از یک واسط (Facade) استفاده می‌کند که عملکرد زیرسیستم را مجری می‌کند و واجد تمامی پیچیدگی‌های داخلی است، در حالی که برای کاربران خارجی یک واسط ساده و قابل استفاده فراهم می‌کند.

کاربرد دیزاین پترن Bridge چیست؟

دیزاین پترن Bridge یکی از الگوهای طراحی ساختاری است که رابط (Interface) اصلی را از پیاده‌سازی جدا می‌کند تا اجزا مختلف بتوانند مستقل از یکدیگر تغییر کنند. الگوی Bridge امکان ارتباط میان اجزای مختلف را فراهم می‌کند و به طور مستقل تغییرات در هر دو طرف رابط و پیاده‌سازی‌ها را ممکن می‌سازد.

کاربرد دیزاین پترن Composite چیست؟

دیزاین پترن Composite یکی از الگوهای طراحی ساختاری است که امکان ساختاردهی درختی از اشیاء را فراهم می‌کند تا اشیاء تکی یا گروهی را به صورت یکسان به دسترسی و استفاده قرار دهد. الگوی کامپوزیت به ما این امکان را می‌دهد تا اجزا را به صورت درختی سازماندهی کنیم، به طوری که اجزا تکی (Leaf) و گروهی (Composite) را می‌توان به یک شیء واحد (Component) تلقی کرد.

کاربرد دیزاین پترن Flyweight چیست؟

دیزاین پترن Flyweight یکی از الگوهای طراحی ساختاری است که هدف آن بهینه‌سازی مصرف حافظه در برنامه است. این الگو برای کاهش تکرار و اشتراک منابع بین اشیاء استفاده می‌شود. با استفاده از الگوی Flyweight، می‌توانیم اشیاءی را که ویژگی‌های مشابهی دارند، به صورت مشترک به اشتراک بگذاریم و مصرف حافظه را کاهش دهیم.

کاربرد دیزاین پترن Proxy چیست؟

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

الگوهای طراحی رفتاری (Behavioral Design Patterns)

انواع الگوهای طراحی رفتاری (Behavioral Design Patterns)

کاربرد دیزاین پترن رفتاری چیست؟ الگوهای طراحی رفتاری (Behavioral Design Patterns) در برنامه نویسی شیءگرا به منظور مدیریت رفتار و ارتباطات بین اشیاء و کلاس‌ها استفاده می‌شوند. این الگوها بر روی رفتار و تعامل بین اجزای سیستم تمرکز دارند و به شما امکان می‌دهند تا تغییرات در رفتار برنامه را به صورت انعطاف‌پذیر اعمال کنید.

دیزاین پترن‌های رفتاری، خود به 10 بخش زیر دسته‌بندی می‌شوند:

  1. Chain of responsibility
  2. Strategy
  3. Iterator
  4. Command
  5. Mediator
  6. Memento
  7. Observer
  8. State
  9. Template Method
  10. Visitor

کاربرد دیزاین پترن Chain of responsibility چیست؟

دیزاین پترن Chain of Responsibility یکی از الگوهای طراحی رفتاری است که در آن درخواست‌ها را از طریق زنجیره‌ای از اشیاء پردازش می‌کند. در الگوی Chain of Responsibility، هر اشیاء در زنجیره می‌تواند درخواست را پردازش کند یا آن را به اشیاء دیگری در زنجیره منتقل کند. با استفاده از این الگو، درخواست‌ها به صورت پویا و قابل تغییر در طول زمان به اشیاء مختلف ارسال می‌شوند.

کاربرد دیزاین پترن Strategy چیست؟

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

کاربرد دیزاین پترن Iterator چیست؟

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

کاربرد دیزاین پترن Command چیست؟

دیزاین پترن Command یکی از الگوهای طراحی رفتاری است که هدف آن جدا سازی عملیات انجام شده در یک درخواست از اجرای آن دریافت‌کننده می‌باشد. الگوی Command به ما امکان می‌دهد عملیات مختلف را در قالب یک شیء قرار داده و آن را به عنوان پارامتری به یک شیء دیگر (موسوم به Receiver) انتقال دهیم. این شیء دیگر قادر است این عملیات را در زمان مناسب اجرا کند.

کاربرد دیزاین پترن Mediator چیست؟

دیزاین پترن Mediator یکی از الگوهای طراحی رفتاری است که هدف آن کاهش تعامل مستقیم بین اشیاء و جلوگیری از وابستگی های زیاد در بین آن‌ها است. در الگوی Mediator، یک شیء میانجی (Mediator) به عنوان واسطه ایجاد می‌شود که اشیاء دیگر با استفاده از آن با یکدیگر ارتباط برقرار کنند.

کاربرد دیزاین پترن Memento چیست؟

دیزاین پترن Memento یکی از الگوهای طراحی رفتاری است که هدف آن ذخیره و بازیابی وضعیت یک شیء بدون نیاز به افشای جزئیات پیاده‌سازی است. الگوی Memento به ما این امکان را می‌دهد که وضعیت یک شیء را در یک لحظه زمانی ذخیره کرده و در زمان دیگری بازیابی کنیم، به طوری که شیء اصلی از این تغییرات ناشی از بازیابی وضعیت آگاه نمی‌شود.

کاربرد دیزاین پترن Observer چیست؟

دیزاین پترن Observer یکی از الگوهای طراحی رفتاری است که در برنامه‌نویسی شیء‌گرا استفاده می‌شود. هدف از الگوی Observer، ایجاد رابطه‌ای بین یک شیء (موسوم به Subject) و یک یا چند شیء دیگر (موسوم به Observer) است به طوری که وقتی وضعیت شیء Subject تغییر کند، تمام شیء‌های Observer به صورت خودکار مطلع شوند و به تغییرات واکنش نشان دهند.

کاربرد دیزاین پترن State چیست؟

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

کاربرد دیزاین پترن Template Method چیست؟

دیزاین پترن Template Method یکی از الگوهای طراحی رفتاری است که در برنامه‌نویسی شیءگرا استفاده می‌شود. هدف از الگوی تمپلیت متد، ارائه یک قالب (Template) برای الگوریتم‌ها است که بخش‌هایی از الگوریتم مشابه هستند ولی بخش‌های دیگر قابل تغییر است. با استفاده از الگوی Template Method، می‌توانیم قسمت‌های مشابه را در یک متد پایه (Base Method) قرار داده و بخش‌های متغیر را در متدهایی که در کلاس‌های مشتق (Subclasses) تعریف می‌شوند، پیاده‌سازی کنیم.

کاربرد دیزاین پترن Visitor چیست؟

دیزاین پترن Visitor یکی از الگوهای طراحی رفتاری است که در برنامه‌نویسی شیءگرا استفاده می‌شود. هدف الگوی ویزیتور، فراهم کردن امکان اجرای عملیات‌های مختلف بر روی اشیاء یک ساختار شیءگرا با استفاده از یک شیء Visitor است. با استفاده از الگوی Visitor، می‌توانیم عملیات‌های جدید را بر روی ساختار بی‌نیاز از تغییر کردن کلاس‌های اصلی اعمال کنیم.

جمع‌بندی 23 نوع الگوی طراحی (Design Pattern)

انواع دیزاین پترن و کاربرد آن‌ها

نوع دیزاین پترن نام دیزاین پترن کاربرد دیزاین پترن
ایجادی Singleton یک کلاس تنها یک نمونه از خود می‌تواند داشته باشد و امکان ساخت بیش از یک نمونه از آن را محدود می‌کند.
ایجادی Factory Method این الگو برای ایجاد یک روش متفاوت برای ایجاد نمونه‌های یک کلاس و اجازه دادن به زیرکلاس‌ها برای تعیین نوع نمونه‌های ایجاد شده، استفاده می‌شود.
ایجادی Prototype این الگو برای ایجاد نمونه‌های جدید از یک کلاس با استفاده از کپی‌برداری از یک نمونه موجود، بدون نیاز به ساخت مجدد آن کلاس، استفاده می‌شود.
ایجادی Abstract Factory برای ایجاد یک خانواده از اشیاء مرتبط و متعلق به یک مجموعه موضوعی با استفاده از یک واسط مشترک، بدون وابستگی به کلاس‌های خاص، استفاده می‌شود.
ایجادی Builder این الگو فرایند ساخت یک شیء را از نمایش آن جدا کرده تا بتوان همان فرایند ساخت را برای ایجاد نمایش‌های مختلف بکار برد.
ایجادی Object Pool برای بهبود عملکرد و کارایی برنامه با استفاده مجدد از اشیاء ساخته شده قبلی، به جای ساخت مجدد آن‌ها، از اشغال‌سازی‌های سنگین منابع دوری می‌کند.
ساختاری Adapter برای اتصال و تبدیل رابط یک کلاس به رابطی دیگر که ساختار و نحوه عملکرد آن متفاوت است، استفاده می‌شود و امکان همکاری بین اشیائی که قبلاً بخاطر داشتن رابط‌های ناسازگار نمی‌توانستند با هم کار کنند را فراهم می‌سازد.
ساختاری Decorator این الگو برای افزودن ویژگی‌ها و عملکردهای جدید به یک شیء بدون تغییر در رابطه‌ی آن شیء، استفاده می‌شود.
ساختاری Facade این الگو برای ایجاد یک رابط ساده‌تر و یکپارچه‌تر برای دسترسی به یک زیرسیستم پیچیده‌تر، استفاده می‌شود.
ساختاری Bridge برای جدا سازی یک مجموعه از کلاس‌ها از رابط آن‌ها و امکان تغییر آن‌ها به صورت مستقل، استفاده می‌شود.
ساختاری Composite این الگو برای ایجاد ساختاری سلسله‌مراتبی از اشیاء به صورت گرافیکی و امکان استفاده یکسان از اشیاء تکی و گروهی، استفاده می‌شود.
ساختاری Flyweight برای کاهش مصرف حافظه و بهبود عملکرد با به اشتراک گذاری اشیاء کوچک و مشابه در سطح سیستم، استفاده می‌شود.
ساختاری Proxy برای ایجاد یک نماینده‌ای بین کاربر و یک شیء دیگر برای کنترل دسترسی، اضافه کردن قابلیت‌های اضافی و مدیریت عملکرد، استفاده می‌شود.
رفتاری Chain of responsibility این الگو برای ارائه روشی برای پردازش درخواست‌ها توسط یک زنجیره از شیء‌ها و امکان انتقال درخواست بین آن‌ها، استفاده می‌شود.
رفتاری Strategy برای انتخاب یکی از چندین روش متفاوت برای انجام یک عملیات خاص و قابل تعویض آن، استفاده می‌شود.
رفتاری Iterator این الگو برای ارائه روشی برای دسترسی به عناصر یک مجموعه به صورت مرتب و متوالی بدون افشای جزئیات ساختار داده، استفاده می‌شود.
رفتاری Command یک درخواست را به صورت یک شیء کپسول‌سازی می‌کند و این امکان را فراهم می‌سازد تا مشتری‌ها را با درخواست‌های متفاوت پارامتردهی، صف بندی یا Log کرده و قابلیت برگشت به عقب را فراهم می‌کند.
رفتاری Mediator این الگو برای کاهش وابستگی بین اجزای یک سیستم و ایجاد یک شیء واسطه برای مدیریت و ارتباط بین آن‌ها، استفاده می‌شود.
رفتاری Memento برای ذخیره و بازیابی وضعیت یک شیء بدون نیاز به افشای جزئیات پیاده‌سازی، استفاده می‌شود.
رفتاری Observer یک نوع وابستگی یک‌به‌چند بین اشیاء تعریف کرده بطوری که وقتی یک شیء حالتش را تغییر داد، تمام اشیاء وابسته به آن خبردار شده تا آن‌ها نیز خود را با آن تغییر هماهنگ کنند.
رفتاری State این الگو اجازه می‌دهد تا یک شیء هنگامی که حالتش عوض شد، رفتارش را تغییر دهد. اشیاء از این نوع رفتار کلاسی که در آن قرار دارند را تغییر می‌دهند.
رفتاری Template Method اسکلت کلی یک الگوریتم را تعریف کرده و پیاده‌سازی بعضی قدم‌های آن را به زیر کلاس‌ها محول می‌کند. این الگو امکان تغییر بعضی از قدم‌های یک الگوریتم را بدون تغییر در ساختار کلی الگوریتم به زیر کلاس‌ها می‌دهد.
رفتاری Visitor این الگو برای اضافه کردن عملیات‌های جدید به یک ساختار شیءی بدون تغییر در کلاس‌های مربوطه و جداسازی عملیات از ساختار، استفاده می‌شود.

معرفی کتاب برای آموزش دیزاین پترن‌ها

حال که دانستیم الگوی طراحی یا Design Pattern چیست؟ در ین قسمت به معرفی کتاب آموزش دیزاین پترن می‌پردازیم. یکی از کتاب‌های معتبر و پرطرفدار برای آموزش دیزاین پترن‌ها عبارت است از «Design Patterns: Elements of Reusable Object-Oriented Software» نوشته گروهی از نویسندگان شامل اِریک گاما، ریچارد هلم، رالف جانسون و جان ولیسیدز است.

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

کتاب آموزش دیزاین پترن (Design Patterns: Elements of Reusable Object-Oriented Software)

همچنین، کتاب «Head First Design Patterns» نوشته اِریک فریمن و الیزابت فریمن یک منبع خوب دیگر برای آموزش دیزاین پترن‌ها است. این کتاب با استفاده از رویکرد آموزشی بصری و تعاملی، بازخوردها و تمرین‌های عملی، به خواننده کمک می‌کند تا مفاهیم دیزاین پترن‌ها را بهتر درک کند.

کتاب آموزش دیزاین پترن (Head First Design Patterns)

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

جمع‌بندی

دیزاین پترن چیست؟ در این مقاله کاربرد دیزاین پترن و مزایا و معایب آن را بررسی کردیم و در ادامه انواع دیزاین پترن را معرفی کردیم. به‌طور خلاصه Design Patternها یک سری الگوهای طراحی هستند که برای حل مشکلات در حوزه‌های نرم‌افزار به وجود آمدند. برای یادگیری الگوهای طراحی (Design Patterns) باید تجربه زیادی در برنامه نویسی داشته باشید. در این مقاله سعی شد یک معرفی کلی از انواع دیزاین پترن‌ها داشته باشیم، در مقالات آینده کاربرد هر یک از دیزاین پترن‌های مختلف را تک به تک با مثال‌های بیشتری بررسی خواهیم کرد. شما با کدام دیزاین پترن کار کرده‌اید؟ لطفا در قسمت نظرات با ما در میان بگذارید.