Design patterns are reusable solutions to commonly occurring problems within a given context in software design. They are templates for how to solve problems in ways that improve code readability for coders and architects who are familiar with patterns.