A Design Pattern essentially consists of a problem in a
software design and a solution to the same. In Design Patterns each pattern is
described with its name, the motivation behind the pattern and its
applicability. Understanding the applicability of a design pattern is of
utmost importance prior to implementing it.
According to MSDN, "A design pattern is a description
of a set of interacting classes that provide a framework for a solution to a
generalized problem in a specific context or environment. In other words, a
pattern suggests a solution to a particular problem or issue in object-oriented
software development. Additionally, patterns take into account design
constraints and other factors that limit their applicability to the solution in
general. Together, the classes, the communication and interconnections among
those classes, and the contextual specifics define a pattern that provides a
solution to any problem in object-oriented software design that presents
characteristics and requirements matching those addressed by the pattern
context."
"A design pattern systematically names, motivates, and
explains a general design that addresses a recurring design problem in
object-oriented systems. It describes the problem, the solution, when to apply
the solution, and its consequences. It also gives implementation hints and
examples. The solution is a general arrangement of objects and classes that
solve the problem. The solution is customized and implemented to solve the
problem in a particular context". -- Design Patterns: Elements of Reusable
Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.