Design patterns are efficient and elegant solutions to common problems in object-oriented software design. They are high-level abstract templates that can be applied to particular kinds of design problems.
In their very influential book, Design Patterns, Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, often (affectionately) referred to as the “Gang of Four,” analyzed 23 specific patterns [Gamma95]. Each pattern has a section devoted to it, including
A pattern name
A description of the kinds of problems to which one might apply the pattern
An abstract description of a design problem and how its solution can be obtained
A discussion of the results and trade-offs ...