This is an old revision of the document!
A pattern is an often-used, proven solution to a recurring problem in a certain context.
There are plenty of definitions for the notion “pattern”. Here are some of the most notable ones:
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.1)
Each pattern is a three-part rule, which expresses a relation between a certain context, a problem, and a solution.2)
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.3)
A pattern […] describes a particular recurring design problem that arises in specific design contexts, and presents a well-proven generic scheme for its solution. The solution scheme is specified by describing its constituent components, their responsibilities and relationships, and the ways in which they collaborate.4)
Note that the difference between a pattern description and the pattern itself is often neglected.