A design pattern is a reusable, generalized solution to a common problem encountered in software engineering. These documented templates provide an abstract approach to designing flexible and maintainable systems, particularly in object-oriented programming.