A design pattern provides a general reusable solution to common design problems. Design patterns help prevent subtle issues, can be improved over time, and provide general solutions that are not tied to specific problems. There are three main categories of design patterns: creational patterns deal with class instantiation, structural patterns handle class and object composition, and behavioral patterns concern communication between objects. Common design patterns include factories, builders, observers, and strategies.