According to Wikipedia:
[A] software design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code. It is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.
There are many recognized software design patterns, and new ones are proposed on a regular basis. Other topics cover many of the most common patterns, and the Wikipedia article provides a more extensive list.
Similarly, there are different ways to classify design patterns, but the original classification is:
The idea of design patterns has been extended to domain-specific design patterns for domains such as user interface design, data visualization, secure design, web design and business model design.
Finally, there is a related concept called a software architecture pattern which is described as being the analogue for design patterns applied to software architectures.