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