در دنیای برنامه نویسی Design Pattern ها اختراع شدن برای پاسخ گویی به یک سری مسایل و مشکلاتی که در برنامه نویسی رایج هستند. مانند دنیای روزانه ما که برای تولید ماشین (در واقع تولید ماشین یک مساله هست که باید حل بشه ) دیگه کسی چرخ ( در واقع چرخ یک مساله رایج هست که برای تولید هر ماشینی باید چرخ را نیز تولید کرد ) رو از اول اختراع نمیکنه. در برنامه نویسی هم بعضی مسایل پیش می ایند که مسایل رایجی هستند که قبلا به آن مسایل فکر شده و یک سری الگو های طراحی (Design Pattern) برای آن مسایل اختراع شده است.
متن پایین رو از ویکی پدیا گذاشتم:
در مهندسی نرمافزار، الگوی طراحی (به انگلیسی: Design Pattern) یک راهحل عمومی قابل تکرار برای مشکلات متداول در زمینه طراحی نرمافزار است. الگوی طراحی، یک طراحی تمامشده نیست که به صورت مستقیم بتواند تبدیل به کد منبع یا ماشین شود؛ بلکه، یک توضیح یا قالب برای حل یک مسئله در شرایط مختلف است. الگوها در واقع بهترین روش ممکن هستند که یک برنامهنویس میتواند در هنگام طراحی یک برنامه برای حل مشکلاتش از آنها استفاده کند. الگوهای طراحی شیءگرا نوعاً نشاندهندۀ روابط و تعاملها بین کلاسها و شیءها هستند، بدون اینکه کلاسها یا اشیا نهایی برنامه را مشخص کند.
چیز مهمی که برای یادگیری Design Pattern ها بنظرم اهمیت داره اینه که یادبگیریم هر الگو طراحی (Design Pattern) برای حل کردن چه مساله ای به وجود اومده. الگوهای طراحی یک نوع نگاه کردن به حل مسایل هست و مهمه اینه در برنامه های خودمون بتونیم تشخیص بدیم که کجا از چه الگو طراحی استفاده کنیم. برای این موضوع ابتدا باید بدونید که یک الگو طراحی برای چه هدفی به وجود امده است یعنی چه مساله ای در دنیای برنامه نویسی رو قراره حل کنه و بعد به چه شکلی این مساله رو حل میکنه.
کلا برای الگوهای طراحی مهمه که بعد از یادگیری اون حتما داخل مسایل روزمره برنامه نویسی ازشون استفاده کنیم. اولش ممکنه بنظر برسه که داره کار رو یکم پیچیده تر میکنه ولی اگر قرار باشه برنامون یکم گسترش پیدا کنه و بزرگ بشه بهترین راه برای تمیز و قابل گسترش نگه داشتن برنامه استفاده از الگوهای طراحی هستش. پس بنظرم هر الگو طراحی که یاد گرفتید سعی کنید از اون روز به بعد داخل هر برنامه ای که مینویسد اگه دیدید میشه از الگو طراحی استفاده کرد حتما اونو به کار بگیرید.( صرفا خوندن و دونستن یک سری الگو طراحی هیچ کمکی بهتون نمیکنه.)
الگوهای طراحی به زبان برنامه نویسی خاصی وابسته نیستند و با هر زبانی که برنامه نویسی میکنید میتونید از الگوهای طراحی استفاده کنید.(من خودم تو زبان های cpp و java و c# دیدم که از الگوهای طراحی میشه استفاده کرد.)
من خودم اولش الگوهای طراحی رو یاد گرفتم بعدا دیدم که الگوهای طراحی دسته بندی خاصی دارند (بنظرم دسته بندی در وهله اول یادگیریش زیاد مهم نیست) که در زیر براتون بعضی هاشو معرفی میکنم(زیاد کامل نیست و صرفا به اشاره کردن اسمشون اکتفا کردم) ولی بنظرم از همه مهمتر اینه که یاد بگیرید توی برنامتون کجا و از چه الگو طراحی میتونید استفاده کنید.
الگوهای طراحی سازنده (Creational Design Patterns)
الگوهای طراحی ساختاری(Structural Design Patterns)
الگوهای طراحی رفتاری (Behavioral Design Patterns)