Design patterns are solutions to general problems that software programmers face during development, and are built from the experience of what works and what doesn't. These solutions are trialed and tested by numerous developers in various situations. The benefits of using a pattern based on this previous activity ensure that the same efforts are not repeated again and again. In addition to this, using a pattern adds a sense of reliability that the problem will be solved without introducing a defect or issue.
We are naturally DRY (Don't Repeat Yourself) often without thinking about it! Developers naturally compartmentalize functionality, create reusable methods, & make helpful classes.