It's more like using Right tool for Right Job.
So, pros and cons depend on how well did you use it in your design?
One help what these patterns provide that we need not reinvent the wheel. Someone has already found solution for a problem and published it for others to use.
Hence, Pros are a follows (but not limited to)
- Time is less wasted.
- We get robust solution without spending much effort.
- Highly scalable.
- Common understanding among developers.
Cons can be summarized if you use it for over engineering
. i.e. making a simple problem more complex when pattern use can be avoided OR using a Pattern1(say) in place of Pattern2(say).
In general, It depends on how you use them.
You might like see following links:
Categories of design patterns
Does functional programming replace GoF design patterns?
Examples of GoF Design Patterns in Java's core libraries