Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.
--Christopher Alexander
The design patterns are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.
--GoF