Design pattern provide a great way to avoid commonly occurring problems in software development which also helps you to make your software components reusable.
Software design pattern is a template specifying a way to solve a problem.
Great line by Jessica Gaston :
One man's crappy software is another man's fulltime job.
Design patterns are grouped into following categories:
1. Creational
2. Behavioural
3. Structural