الگوها یا Pattern در دنیای نرمافزار، به راههای گفته میشه که برای حل مشکلات و دغدغههای مشخص و رایج هستن!

به طور مثال زمانی که میخواید یه وب اپلیکیشن بسازید به طوریکه ۲ نفر به طور موازی و سریع روی پروژه کار کنن و یک نفر ظاهرش رو آماده کنه و نفر دیگه قسمت منطق و کنترلرها رو پیاده سازی کنه بهتره که از الگوی MVC استفاده کنید
تعداد الگوها کم نیست و بهترین راه یادگیری این الگوها، اینه که کاملا متوجه بشید که چه مشکل و دغدغهای رو حل میکنن و به مرور زمان متوجه میشید که در کدوم قسمت برنامهتون بهتره از این الگوها استفاده کنید!
شما برای درک عمیق این قسمت، فقط نیاز به تمرین دارید. مفاهیم رو خوب بخونید، درک کنید و مثالهایی با توجه به تکنولوژی که کار میکنید، بررسی کنید.

الگوهایی مثل MVC و یا MVVM ذاتا از نوع معماری هستن، دلیلی که شما از این الگوها استفاده میکنید اینه که پروژتون رو سازماندهی و منظم میکنه و سرعت توسعه رو افزایش میده.
یک سری از الگوها برای رفع نقصها و کمبودها در زبان برنامهنویسی هستن. البته شما برای زبانهای برنامهنویسی که راحت نوشته و خونده میشن نیازی به این الگوها ندارید اما همیشه ممکنه انتخابهای زیادی داشته باشید. اکثر الگوهای GoF در این دسته قرار میگیرن.
این نکنه یادتون بمونه که زمانی از الگو ها و پترن ها در نرمافزارتون و اپلیکیشنتون استفاده کنید که میخواید مشکل مناسب رو حل کنید. هیچوقت برنامهای ننویسید که حاصل وصله پینه کردن الگوهاست!
برای همه مشکلات برنامهنویسی، الگو و راهحل مشخصی وجود نداره، چون در این صورت برنامه نویسی صرفا تمرین وصله زدن الگوها میشد!

الگوها برای حل مشکلات رایج ایجاد شدند و ضد الگوها برای حل نکردن مسائل، چون باعث نتایج نادرست و افتضاحی میشن!
یکی از راههای ایجاد ضدالگو استفاده نادرست از الگوهاست، که ممکنه باعث ایجاد بار اضافه یا پیچدگی در کدهای برنامه بشه ( به طوری که مزایای استفاده از الگوی مورد نظر اصلا به چشم نیان ) چطور؟ مثلا اگر برنامه نویس یک کلاس (Class) بنویسه که کارهای زیادی رو داخل این کلاس انجام بده، منجر به یک ضد الگو به اسم God Object میشه. این ضد الگو باعث میشه که مثلا با تغییر یک قسمت از کد برنامه، نیاز به تغییر قسمت های دیگهی برنامه هم باشه!
در نهایت این رو مد نظر داشته باشید که شما باید تصمیم بگیرید که چه زمانی و در کدوم قسمت برنامه از چه الگویی استفاده کنید.